求解案例之Cloud balancing

内容概要

上一篇文章,我们学习了OptaPlanner的基本使用,及部分基本概念。也学会构建一个课程分配的例子。这次我们继续来通过案例来学习OptaPlanner的使用。

问题描述

假设你的公司拥有一些云计算机,需要在这些计算机上运行一些进程,需要将每个进程分配到一台计算机上运行。 必须满足以下硬约束:

  • 每台计算机必须能够处理其进程总和的最低硬件要求。
    • CPU功率:一台计算机的CPU功率必须至少是分配给该计算机的进程所需的CPU功率之和。
    • 内存容量:一台计算机的RAM内存必须至少是分配给该计算机的进程所需的RAM内存的总和。
    • 网络容量:一台计算机的网络带宽必须至少是分配给该计算机的进程所需的网络带宽之和。

应优化以下软约束:

  • 每台分配有一个或多个进程的计算机都会产生维护费用(每台计算机的费用是固定的)。
    • 成本:使总的维护成本最小化。

这个问题是装箱问题的一种形式。下面是一个简化的例子,我们用一个简单的算法,将四个进程分配给两台有两个约束条件(CPU和RAM)的计算机。

image.png

 这里使用的简单算法是贪心算法(又称贪婪算法,是指在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,算法得到的是在某种意义上的局部最优解)。

它首先分配较大的进程,然后将较小的进程分配到剩余空间。正如我们所看到的,这不是最优的,因为它没有留下足够的空间来分配黄色进程D。

OptaPlanner通过使用额外的、更智能的算法找到了更理想的解决方案。它还可以扩展:在数据(更多的进程,更多的计算机)和约束(更多的硬件要求,其他约束)方面。

问题大小

我们从下面的表格来看不同线程数、计算机数的搜索空间是多大。

image.png

业务建模

我们在建模的时候,要区分出来哪些是 Planning entities规划实体,它们的哪些属性是Planning variables规划属性。
这个例子的模型中定义出代表问题的输入数据对象,这个简单例子中,这些对象就是Computer、Progress。 在这个模型中的一个单独的对象必须代表问题的完整数据集,其中包含输入数据以及解决方案。在这个例子中,这个对象持有一个Computer的列表和一个Progress的列表。每个Progress被分配给一台Computer;Computer之间的Progress分配就是解决方案。

步骤

  1. 绘制UML图。
  2. 规划模型数据,不要出现重复数据。
  3. 写出模型内每一个实例:
    • Computer: 代表一台有一定硬件和维护费用的计算机。在这个例子中,Computer的属性是:cpuPowermemorynetworkBandwidthcost.。
    • Progress:代表一个有需求的进程。需要由OptaPlanner分配给一台计算机。Progress的属性有:requiredCpuPowerrequiredMemory, and requiredNetworkBandwidth.
    • CloudBalance:代表一个Problem。包含某个数据集的每台计算机和进程。
  4. 找出哪些字段在求解期间会发生变化。
    • Planning entity:OptaPlanner在求解过程中可以改变的类。在这个例子中,它是Progress类&#
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值