首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多目标优化函数(gurobi)中系数确定的仿真

多目标优化函数(gurobi)中系数确定的仿真
EN

Stack Overflow用户
提问于 2021-02-05 20:10:43
回答 1查看 55关注 0票数 0

我正在为一个工业质量实验室的Job Shop调度构建一个相当大且复杂的优化模型,我正在使用gurobi。

这是一个多目标模型,我需要最小化四台不同机器上的处理时间,但我还需要优先安排管道,这些管道将释放更多的材料运往客户(保持低库存)。

一个管道可以关联一个或多个测试,我也可以将多个管道关联到一个订单;一旦完成了所有需要的测试,订单就可以发送给客户端。管道被放在一些盒子里,然后被带到机器上(一台机器一次一个盒子),机器处理里面的所有管道。

我的目标函数如下:

代码语言:javascript
复制
OBJECTIVE   = gp.quicksum(T[m] for m in machines)
            - gp.quicksum(Pipe_Box[i,ii,c] * box_convenience[i][ii] * k1
            for i in pipes for ii in pipes for c in boxes if pipes.index(ii) > 
            pipes.index(i))
            - gp.quicksum(Weight_Check[i,c,m] * Pipe_Weight_Flag[i] * k2 for 
            i in pipes for c in boxes for m in machines)

首先,我最小化机器时间。

其次,我正在考虑这样一个事实:如果我将与订单关联的所有管道放在一个盒子中,那么我将比将这些管道放在不同的盒子中更快地解锁订单。

第三,也是最后一点,我正在考虑所有订单重量/测试数量在5吨以上的订单。

代码语言:javascript
复制
T[m], Pipe_Box[i,ii,c] and Weight_Check[i,c,m]

是我的变量。

代码语言:javascript
复制
box_convenience[i][ii] and Pipe_Weight_Flag[i]

是二进制参数,它们告诉我不同的管道是否属于相同的顺序,以及消泡率是否大于5吨

代码语言:javascript
复制
k1 ad k2

是系数,我需要知道,对于多目标函数,它们的最佳配置是什么。

我正在考虑运行一个带有两个嵌套循环的模拟,从零开始k1和k2,并将它们递增+100直到某个阈值(假设每个阈值为3000 )。

在这种情况下,我会有90个不同的模型迭代,因此有不同的解决方案。

我想知道在gurobi中是否有一个内置的工具来执行这个任务,或者我是否可以使用另一种方法并使用像simpy这样的库来实现我想要的。

Gurobi将目标函数保存在一个具有专有.sol扩展名的文本文件中(我认为,这是一个普通的文本文件),其结构如下:

代码语言:javascript
复制
# Solution for model Job Shop Scheduling
# Objective value = 1.9384345683700005e+04
T[M1] = 1000
T[M2] = 5332
...
Pipe_Box[Pipe1,Pipe2,Box1] = 1
Pipe_Box[Pipe1,Pipe2,Box2] = 0
...

我从来不需要做这样的事情,我有点不知所措,任何投入或帮助都会非常感谢!

编辑:我看到gurobi支持多目标优化,所以下面的代码可以工作:

代码语言:javascript
复制
model.setObjectiveN(gp.quicksum(T[m] for m in machines), 2, 1)
model.setObjectiveN(- gp.quicksum(Pipe_Box[i,ii,c] * box_convenience[i][ii]
                    for i in pipes for ii in pipes for c in boxes if 
                    pipes.index(ii) > pipes.index(i), 1, 1)
model.setObjectiveN(- gp.quicksum(Weight_Check[i,c,m] * Pipe_Weight_Flag[i] * k2 
                    for i in pipes for c in boxes for m in machines, 1, 1)

问题仍然是一样的,有没有办法改变权重和优先级参数并获得不同的解决方案?

EN

回答 1

Stack Overflow用户

发布于 2021-02-06 04:04:41

这并不总是可能的,但如果你能用美元来表达这两个目标,那么这个问题就解决了。

否则,我通常做的是:(1)找到目标的“框”(每个目标的最小/最大值),然后(2)进行粗略的网格搜索。这将生成一些结果,您可以使用这些结果来改进内容。(估计的)有效边界的图片可以帮助交流事物,还可以帮助识别需要更精细网格的有趣区域(空间的某些部分可能是平的)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66063057

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档