Skip to main content
Log in

Dynamic bidding in spot market for profit maximization in the public cloud

  • Published:
The Journal of Supercomputing Aims and scope Submit manuscript

Abstract

In public cloud domain, some cloud providers sell surplus resources in the form of spot instances to improve their profits. The average spot price is much cheaper than the on-demand options, which drives more and more cloud users to use spot instances to accelerate their services. However, the cloud user faces a challenge in determining the instance rental and management policy due to the unconventional pricing structure in the spot market and fluctuations in workload and spot price. In this work, we propose a dynamic bidding and resource management algorithm for the cloud user to cut down the instance rental bill in the spot market. The proposed algorithm operates in two timescales, i.e., it determines the bidding, instance rental, and job dispatching policy hourly and makes instances allocation decision in a finer granularity. The advantages of our approach are that it has a simple structure and needs no a priori statistical information of spot price and workload. We prove the optimality of the proposed algorithm and use extensive simulations to study its performance. It is shown that D-bid can save up to almost 70% of the rental cost compared to a baseline nonwork-conserving strategy.

This is a preview of subscription content, log in via an institution to check access.

Access this article

Price excludes VAT (USA)
Tax calculation will be finalised during checkout.

Instant access to the full article PDF.

Fig. 1
Fig. 2
Fig. 3
Fig. 4
Fig. 5
Fig. 6
Fig. 7

Similar content being viewed by others

Notes

  1. Since the cloud users are rationale and constrained by their budgets, it is unlikely for them to bid with an infinite price. Therefore, setting spot price to infinity is an unprofitable behavior for the cloud provider as no surplus resource will be sold. In practice, the upper bound \(c_j^{\max }\) can be set to an arbitrary large value. As analyzed in the following section, D-bid hardly chooses an unexpected high bidding price since its object is to minimize resource rental cost.

  2. In this paper, t is a slot index and m is a frame index. We use “at time t” and “in time slot t” interchangeably. Time starts from the 0th slot. Since a frame contains T slots, we use mT to denote the first slot in frame m.

  3. The capacity region \(\varLambda \) is defined as a set of arrival matrix where constraint (12) can be guaranteed by using our control framework.

  4. Remember that a spot instance is charged only if no out-of-bid event occurs.

  5. Here the system capacity stands for the service rate when maximum number of instances (\(x^\mathrm{o}_{\max }+x^\mathrm{s}_{\max }\)) are rented.

References

  1. http://aws.amazon.com/

  2. http://aws.amazon.com/ec2/purchasing-options/spot-instances/

  3. http://www.uni-cloud.com.cn

  4. Andrzejak A, Kondo D, Yi S (2010) Decision model for cloud computing under sla constraints. In: IEEE International Symposium on Telecommunication Systems (MASCOTS)

  5. Ben-Yehuda OA, Ben-Yehuda M, Schuster A, Tsafrir D (2013) Deconstructing Amazon EC2 spot instance pricing. ACM Trans Econ Comput 1(3):1–16

    Article  Google Scholar 

  6. Chaisiri S, Kaewpuang R, Lee BS, Niyato D (2011) Cost minimization for provisioning virtual servers in Amazon elastic compute cloud. In: 19th Annual IEEE International Symposium on Modelling, Analysis, and Simulation of Computer and Telecommunication Systems (MASCOTS)

  7. Chen J, Wang C, Zhou BB, Lee LSYC, Zomaya AY (2011) Tradeoffs between profit and customer satisfaction for service provisioning in the cloud. In: ACM HPDC

  8. Chen Y, Huang J, Xiang X, Lin C (2014) Energy efficient dynamic service selection for large-scale web service systems. In: IEEE International Conference on Web Services

  9. Chohan N, Castillo C, Spreitzer M, Steinder M, Tantawi A, Krintz C (2010) See spot run: using spot instances for MapReduce workflows. In: USENIX HotCloud Workshop

  10. Dadashov E, Cetintemel U, Kraska T (2014) Putting analytics on the spot: or how to lower the cost for analytics. IEEE Internet Comput 18(5):70–73

    Article  Google Scholar 

  11. Li S, Zhou Y, Jiao L, Yan X, Wang X, Lyu MR (2014) Delay-aware cost optimization for dynamic resource provisioning in hybrid clouds. In: The 21st IEEE International Conference on Web Services (ICWS)

  12. Liu H (2011) Cutting MapReduce cost with spot market. In: Proceedings of the 3rd USENIX Conference on Hot Topics in Cloud Computing (HotCloud)

  13. Marathe A, Harris R, Lowenthal D, de Supinski BR, Rountree B, Schulz M (2014) Exploiting redundancy for cost-effective, time-constrained execution of hpc applications on Amazon EC2. In: Proceedings of the 23rd International Symposium on High-Performance Parallel and Distributed Computing (HDPC)

  14. Neely MJ (2010) Stochastic Network Optimization with Application to Communication and Queueing Systems. Morgan & Claypool, San Rafael

    MATH  Google Scholar 

  15. Ren S, He Y, Xu F (2012) Provably-efficient job scheduling for energy and fairness in geographically distributed data centers. In: 32nd IEEE International Conference on Distributed Computing Systems (ICDCS)

  16. Sharma B, Thulasiram RK, Thulasiraman P, Garg SK, Buyya R (2012) Pricing cloud compute commodities: a novel financial economic model. In: 12th IEEE/ACM International Symposium on Cluster, Cloud and Grid Computing (CCGrid)

  17. Song K, Yao Y, Golubchik L (2013) Exploring the profit-reliability trade-off in Amazon’s spot instance market: a better pricing mechanism. In: IEEE/ACM 21st International Symposium on Quality of Service (IWQoS)

  18. Song K, Yao Y, Golubchik L (2013) Improving the revenue, efficiency and reliability in data center spot market: a truthful mechanism. In: IEEE 21st International Symposium on Modelling, Analysis & Simulation of Computer and Telecommunication Systems (MASCOTS)

  19. Song Y, Zafer M, Lee KW (2012) Optimal bidding in spot instance market. In: IEEE INFOCOM

  20. Tang S, Yuan J, Li X (2012) Towards optimal bidding strategy for Amazon EC2 cloud spot instance. In: IEEE 5th International Conference on Cloud Computing (CLOUD )

  21. Urgaonkar B, Kesidis G, Shanbhag UV, Wang, C (2013) Pricing of service in clouds: optimal response and strategic interactions. In: Workshop on Mathematical Performance Modeling and Analysis (MAMA)

  22. Voorsluys W, Buyya R (2012) Reliable provisioning of spot instances for compute-intensive applications. In: 26th IEEE International Conference on Advanced Information Networking and Applications (AINA)

  23. Wan J, Zhang R, Gui X, Xu B (2016) Reactive pricing: an adaptive pricing policy for cloud providers to maximize profit. IEEE Trans Netw Serv Manag 3(4):941–953

    Article  Google Scholar 

  24. Wang D, Wang Y, Liu lichun, Xiao K, Li W, Qiu X (2013) Pricing reserved and on-demand schemes of cloud computing based on option pricing model. In: 15th Asia-Pacific Network Operations and Management Symposium (APNOMS)

  25. Wang W, Liang B, Li B (2013) Revenue maximization with dynamic auctions in IAAS cloud markets. In: IEEE/ACM 21st International Symposium on Quality of Service (IWQoS)

  26. Wieder A, Bhatotia P, Post A, Rodrigues R (2012) Orchestrating the deployment of computations in the cloud with conductor. In: 9th USENIX Symposium on Networked Systems Design and Implementation (NSDI)

  27. Xu H, Li B (2013) Dynamic cloud pricing for revenue maximization. IEEE Trans Cloud Comput 1(2):158–171

    Article  Google Scholar 

  28. Xu H, Li B (2013) A study of pricing for cloud resources. ACM Perform Eval Rev 40(4):3–12

    Article  MathSciNet  Google Scholar 

  29. Yao Y, Huang L, Sharma AB, Golubchik L, Neely MJ (2014) Power cost reduction in distributed data centers: a two-time-scale approach for delay tolerant workloads. IEEE Trans Parallel Distrib Syst 25(1):200–211

    Article  Google Scholar 

  30. Yi S, Andrzejak A, Kondo D (2012) Monetary cost-aware checkpointing and migration on Amazon cloud spot instances. IEEE Trans Serv Comput 5(4):512–524

    Article  Google Scholar 

  31. Yi S, Kondo D, Andrzejak A (2010) Reducing costs of spot instances via checkpointing in the Amazon elastic compute cloud. In: the 3rd International Conference on Cloud Computing (CLOUD), pp 236–243

  32. Zaharia M, Borthakur D, Sarma JS, Elmeleegy K, Shenker S, Stoica I (2010) Delay scheduling: a simple technique for achieving locality and fairness in cluster scheduling. In: ACM EuroSys

  33. Zaman S, Grosu D (2013) A combinatorial auction-based mechanism for dynamic vm provisioning and allocation in clouds. IEEE Trans Cloud Comput 1(2):129–141

    Article  Google Scholar 

  34. Zhang Q, Zhu Q, Boutaba R (2011) Dynamic resource allocation for spot markets in cloud computing environments. In: the Fourth IEEE International Conference on Utility and Cloud Computing (UCC)

  35. Zhao H, Pan M, Liu X, Li X, Fang Y (2012) Optimal resource rental planning for elastic applications in cloud market. In: IEEE 26th International Parallel and Distributed Processing Symposium (IPDPS)

  36. Zhao J, Li H, Wu C, Li Z, Zhang Z, Lau FC (2014) Dynamic pricing and profit maximization for the cloud with geo-distributed data centers. In: IEEE INFOCOM

  37. Zhou Z, Liu F, Jin H, Li B, Li B, Jiang H (2013) On arbitrating the power-performance tradeoff in saas clouds. In: Proceedings of IEEE INFOCOM

  38. Zhou Z, Liu F, Xu Y, Zou R, Xu H, Lui JC, Jin H (2013) Carbon-aware load balancing for geo-distributed cloud services. In: IEEE 21st International Symposium on Modelling, Analysis & Simulation of Computer and Telecommunication Systems (MASCOTS)

Download references

Acknowledgements

This work is funded in part by the National Natural Science Foundation of China (NSFC) under Grant Nos. 61502255 and 61363052, the Inner Mongolia Provincial Natural Science Foundation under Grant No. 2014BS0607 and the Science Research Project for Inner Mongolia Universities under Grant No. NJZY14064.

Author information

Authors and Affiliations

Authors

Corresponding author

Correspondence to Jianxiong Wan.

Appendices

Appendix 1: Proof of Theorem 1

Squaring the queueing dynamic (1) and using the fact that \((\max \{x,0\})^2\le x^2\), we have

$$\begin{aligned} Q_{ij}^2(t+1)\le&\left( Q_{ij}(t)-\sum _{k}r_{ijk}(t)\right) ^2+2Q_{ij}(t)a_{ij}(t)+a_{ij}^2(t)\\ \le&Q_{ij}^2(t)+2Q_{ij}(t)\left( a_{ij}(t)-\sum _{k}r_{ijk}(t)\right) +r_{\max }^2+a_{\max }^2. \end{aligned}$$

Summing up the above equation over \([t, t+T-1]\) we have

$$\begin{aligned} Q_{ij}^2(t+T)-Q_{ij}^2(t)\le \sum _{\tau =t}^{t+T-1}2Q_{ij}(\tau )\left( a_{ij}(\tau )-\sum _{k}r_{ijk}(\tau )\right) +T\left( r_{\max }^2+a_{\max }^2\right) .\nonumber \\ \end{aligned}$$
(30)

Using a same reasoning we also have

$$\begin{aligned} q_{ij}^2(t+T)-q_{ij}^2(t)\le \sum _{\tau =t}^{t+T-1}2q_{ij}(\tau )\left( \sum _{k}r_{ikj}(\tau )-y_{ij}(\tau )s_i\right) +T\left( y_{\max }^2+n^2r_{\max }^2\right) .\nonumber \\ \end{aligned}$$
(31)

Summing up Eqs. (30) and (31) over i and j, and taking expectation on both sides conditioned on queue state \(\theta (t)\), we have

$$\begin{aligned} \varDelta _T(t)\le&\,\,\mathbb {E}\left\{ \sum _{\tau =t}^{t+T-1}\sum _i\sum _j Q_{ij}(\tau )\left( a_{ij}(\tau )-\sum _{k}r_{ijk}(\tau )\right) |\theta (t)\right\} \\&+\mathbb {E}\left\{ \sum _{\tau =t}^{t+T-1}\sum _i\sum _j q_{ij}(\tau )\left( \sum _{k}r_{ikj}(\tau )-y_{ij}(\tau )s_i\right) |\theta (t)\right\} \\&+{Tnk\left( a_{\max }^2+y_{\max }^2+(1+n^2)r_{\max }^2\right) \over 2}. \end{aligned}$$

Now adding \(V\mathbb {E}\left\{ \sum _j\left( x_j^\mathrm{o}(t)c_j^\mathrm{o}+x_j^\mathrm{s}(t)c_j^\mathrm{s}(t)1_j^{\mathrm{oob}}(t)\right) |\theta (t)\right\} \) to both sides completes the proof.

Appendix 2: Proof of Theorem 2

First we give a bound on future queue length in (15). Based on (1) and (8) we have

$$\begin{aligned} Q_{ij}(t)-Tr_{\max }\le Q_{ij}(t+T)\le Q_{ij}(t)+Ta_{\max }. \end{aligned}$$

Further, from constraint (8) we have \(\sum _{k}r_{ikj}\le nr_{\max }\). Combining this with (2) we have

$$\begin{aligned} q_{ij}(t)-Ty_{\max }\le q_{ij}(t+T)\le q_{ij}(t)+Tnr_{\max }. \end{aligned}$$

Hence,

$$\begin{aligned}&\sum _{\tau =t}^{t+T-1} Q_{ij}(\tau )\left( a_{ij}(\tau )-\sum _{k}r_{ijk}(\tau )\right) \\&\quad \le \sum _{\tau =t}^{t+T-1} \left( Q_{ij}(t)+Ta_{\max }\right) a_{ij}(\tau )-\sum _{\tau =t}^{t+T-1} \left( Q_{ij}(t)-Tr_{\max }\right) \sum _{k}r_{ijk}(\tau )\\&\quad \le \sum _{\tau =t}^{t+T-1} Q_{ij}(t)\left( a_{ij}(\tau )-\sum _{k}r_{ijk}(\tau )\right) +T^2\left( a_{\max }^2+r_{\max }^2\right) . \end{aligned}$$

Similarly we have

$$\begin{aligned}&\sum _{\tau =t}^{t+T-1} q_{ij}(\tau )\left( \sum _{k}r_{ikj}(\tau )-y_{ij}(\tau )s_i\right) \\&\quad \le \sum _{\tau =t}^{t+T-1} q_{ij}(t)\left( \sum _{k}r_{ikj}(\tau )-y_{ij}(\tau )s_i\right) +T^2\left( n^2r_{\max }^2+y_{\max }^2\right) . \end{aligned}$$

Taking the above two equations back to (15) we have

$$\begin{aligned}&\varDelta _T(t)+V\mathbb {E}\left\{ \sum _j\left( x_j^\mathrm{o}(t)c_j^\mathrm{o}+x_j^\mathrm{s}(t)c_j^\mathrm{s}(t)1_j^{\mathrm{oob}}(t)\right) |\theta (t)\right\} \nonumber \\&\quad \le \mathbb {E}\left\{ \sum _{\tau =t}^{t+T-1}\sum _i\sum _j Q_{ij}(t)\left( a_{ij}(\tau )-\sum _{k}r_{ijk}(\tau )\right) |\theta (t)\right\} \nonumber \\&\qquad +\mathbb {E}\left\{ \sum _{\tau =t}^{t+T-1}\sum _i\sum _j q_{ij}(t)\left( \sum _{k}r_{ikj}(\tau )-y_{ij}(\tau )s_i\right) |\theta (t)\right\} \nonumber \\&\qquad +V\mathbb {E}\left\{ \sum _j\left( x_j^\mathrm{o}(t)c_j^\mathrm{o}+x_j^\mathrm{s}(t)c_j^\mathrm{s}(t)1_j^{\mathrm{oob}}(t)\right) |\theta (t)\right\} +B_2T. \end{aligned}$$
(32)

Rearranging the R.H.S. of (32) we obtain the result.

Appendix 3: Proof of Theorem 4

D-bid seeks to minimize the R.H.S. of (32), therefore

$$\begin{aligned}&\varDelta _T(t)+V\mathbb {E}\left\{ \sum _j\left( x_j^\mathrm{o}(t)c_j^\mathrm{o}+x_j^\mathrm{s}(t)c_j^\mathrm{s}(t)1_j^{\mathrm{oob}}(t)\right) |\theta (t)\right\} \nonumber \\&\quad \le \mathbb {E}\left\{ \sum _{\tau =t}^{t+T-1}\sum _i\sum _j Q_{ij}(t)\left( a_{ij}(\tau )-\sum _{k}(r_{ijk})^{\pi }(\tau )\right) |\theta (t)\right\} \nonumber \\&\qquad +\mathbb {E}\left\{ \sum _{\tau =t}^{t+T-1}\sum _i\sum _j q_{ij}(t)\left( \sum _{k}(r_{ikj})^{\pi }(\tau )-(y_{ij})^{\pi }(\tau )s_i\right) |\theta (t)\right\} \nonumber \\&\qquad +V\mathbb {E}\left\{ \sum _j\left( (x_j^\mathrm{o})^{\pi }(t)c_j^\mathrm{o}+(x_j^\mathrm{s})^{\pi }(t)c_j^\mathrm{s}(t)1_j^{\mathrm{oob}}(t)\right) |\theta (t)\right\} +B_2T, \end{aligned}$$
(33)

where \(\pi \) is any alternative policy other than D-bid which depends only on \(a_{ij}(t)\) and \(c_j^\mathrm{s}(t)\). Now letting \(\pi =\pi ^*\) and taking expectation over \(\theta (t)\) we have

$$\begin{aligned}&L(\theta (t+T))-L(\theta (t))+V\mathbb {E}\left\{ \sum _j\left( x_j^\mathrm{o}(t)c_j^\mathrm{o}+x_j^\mathrm{s}(t)c_j^\mathrm{s}(t)1_j^{\mathrm{oob}}(t)\right) \right\} \\&\quad \le B_2T+\delta \sum _i\sum _j\left( Q_{ij}(t)+q_{ij}(t)\right) +V(o^*+T\delta ). \end{aligned}$$

Summing up the above equation over \(t=0, T,\ldots , (M-1)T\) and letting \(\delta \rightarrow 0\) we have

$$\begin{aligned}&\sum _{m=0}^{M-1}V\mathbb {E}\left\{ \sum _j\left( x_j^\mathrm{o}(mt)c_j^\mathrm{o}+x_j^\mathrm{s}(mt)c_j^\mathrm{s}(mt)1_j^{\mathrm{oob}}(mt)\right) \right\} \\&\quad \le MB_2T+MVo^* +L(\theta (0))+L(\theta (MT)). \end{aligned}$$

Dividing both sides by MV and letting \(M\rightarrow \infty \) proves part 1).

To prove part 2), observe \(\lambda +\epsilon {\mathbf {1}}\in \varLambda \) indicates the following Slater’s condition:

$$\begin{aligned} \mathbb {E}\left\{ o^{\pi '}(mT)\right\} =&\,\, o^{\pi '}_{\lambda +\epsilon {\mathbf {1}}}, \\ \sum _{\tau =mT}^{(m+1)T-1}\mathbb {E}\left\{ a_{ij}(\tau )\right\} \le&\sum _{\tau =mT}^{(m+1)T-1}\mathbb {E}\left\{ \sum _{k} (r_{ijk})^{\pi '}(\tau )\right\} -\epsilon ,\\ \sum _{\tau =mT}^{(m+1)T-1}\mathbb {E}\left\{ \sum _{k} (r_{ikj})^{\pi '}(\tau )\right\} =&\sum _{\tau =mT}^{(m+1)T-1}\mathbb {E}\left\{ (y_{ij})^{\pi '}(\tau )s_i\right\} -\epsilon , \end{aligned}$$

where \(o^{\pi '}_{\lambda +\epsilon {\mathbf {1}}}\) denotes the value of the object function under arrival matrix \(\lambda +\epsilon {\mathbf {1}}\) and control policy \(\pi '\). Plugging the above equations into the R.H.S. of (33) by letting \(\pi =\pi '\) we have

$$\begin{aligned}&\varDelta _T(t)+V\mathbb {E}\left\{ \sum _j\left( x_j^\mathrm{o}(t)c_j^\mathrm{o}+x_j^\mathrm{s}(t)c_j^\mathrm{s}(t)1_j^{\mathrm{oob}}(t)\right) |\theta (t)\right\} \\&\quad \le B_2T-T\epsilon \sum _i\sum _j \left( Q_{ij}(t)+q_{ij}(t)\right) +Vo^{\pi '}_{\lambda +\epsilon {\mathbf {1}}}. \end{aligned}$$

Taking expectation over \(\theta (t)\) and summing over \(t=0,T,\ldots ,(M-1)T\), and using the fact that \(\mathbb {E}\left\{ \sum _j\left( x_j^\mathrm{o}(mT)c_j^\mathrm{o}+x_j^\mathrm{s}(t)c_j^\mathrm{s}(mT)1_j^{\mathrm{oob}}(mT)\right) \right\} \ge o^*\) yields

$$\begin{aligned}&L(\theta (MT))-L(\theta (0))+MVo^*\\&\quad \le MB_2T-T\epsilon \sum _{m=0}^{M-1}\sum _i\sum _j \left( Q_{ij}(mT)+q_{ij}(mT)\right) +MVo^{\pi '}_{\lambda +\epsilon {\mathbf {1}}}. \end{aligned}$$

Rearraying the terms, dividing both sides by \(MT\epsilon \), and letting \(M\rightarrow \infty \), we obtain

$$\begin{aligned} {1\over M}\sum _{m=0}^{M-1}\sum _i\sum _j \left( Q_{ij}(mT)+q_{ij}(mT)\right) \le {B_2\over \epsilon }+{V\left( o^{\pi '}_{\lambda +\epsilon {\mathbf {1}}}-o^*\right) \over T\epsilon }. \end{aligned}$$

Since \(o^*\ge 0\) and \(o^{\pi '}_{\lambda +\epsilon {\mathbf {1}}}\le \sum _j \left( x_{\max }^\mathrm{o} c_j^\mathrm{o}+x_{\max }^\mathrm{s}c_j^{\max }\right) \), part 2) is proved.

Appendix 4: Proof of Theorem 5

Part 1. For a data center j, suppose that \(\sum _i q_{ij}(t)\le {\texttt {buffer}}_j\), we show that \(\sum _i q_{ij}(t+T)\le {\texttt {buffer}}_j\).

  • If \(\sum _i q_{ij}(t)\le \sum _i {Vc_j^\mathrm{o}\over Ts_i}\), since there are at most \(nkr_{\max }\) jobs can be routed to a data center in this frame, we have \(\sum _i q_{ij}(t+T)\le \sum _i {Vc_j^\mathrm{o}\over Ts_i}+nkr_{\max }\)

  • If \(\sum _i q_{ij}(t)> \sum _i {Vc_j^\mathrm{o}\over Ts_i}\), then at least one queue in data center j satisfies \(Vc_j^\mathrm{o}-Tq_{ij}(t)s_i<0\). According to the on-demand instance provisioning policy (24), broker j will rent \(x_{\max }^\mathrm{o}\) on-demand instances. The assumption \(\sum _i r_{\max }s_i\le Tx_{\max }^\mathrm{o} s_{\min }\) indicates that the number of served jobs is no less than the number of arrived jobs given \(x_{\max }^\mathrm{o}\) amount of on-demand instances in this frame. Combined with queue dynamic (2), we can conclude that the number of buffered jobs cannot increase in the next frame, which proves (26).

Part 2. The proof is similar to part 1. For broker j, we can see that

  • If \(\sum _i Q_{ij}(t)\le {\texttt {buffer}}_j\), then \(\sum _i Q_{ij}(t+T)\le {\texttt {buffer}}_j+Tka_{\max }\) since there can be at most \(a_{\max }\) type-i jobs arrived at broker j in each slot.

  • If \(\sum _i Q_{ij}(t)>{\texttt {buffer}}_j\), then at least one broker queue satisfies \(Q_{ij}(t)-q_{ik}(t)>0\). Using the solution framework in Sect. 5.1, and combining with the assumption \(Ta_{\max }\le r_{\max }\) and queue dynamic (1), we have (27).

Rights and permissions

Reprints and permissions

About this article

Check for updates. Verify currency and authenticity via CrossMark

Cite this article

Wan, J., Gui, X. & Zhang, R. Dynamic bidding in spot market for profit maximization in the public cloud. J Supercomput 73, 4245–4274 (2017). https://doi.org/10.1007/s11227-017-2007-9

Download citation

  • Published:

  • Issue Date:

  • DOI: https://doi.org/10.1007/s11227-017-2007-9

Keywords

Navigation