optimization - 如何最小化 MRCPSP 中外部资源的总成本?
问题描述
嗨,我正在尝试制作一个具有目标函数的模型,以最大限度地降低模式 2 使用成本(使用外部资源的模式)。当我想限制总时间<=21时,我感到困惑,结果没有价值,但是当我设置时间<=50时,结果出来了,虽然我运行模型时的结果只花费了25时间。
tuple Task {
key int id;
{int} succs;
int RelDate;
}
{Task} Tasks = ...;
tuple Mode {
key int taskId;
key int id;
int pt;
int costprod;
int dmdIntRes [IntRes];
int dmdExtRes [ExtRes];
int ExtCost;
}
{Mode} Modes = ...;
dvar interval Taskss [t in Tasks] in t.RelDate..(maxint div 2)-1;
dvar interval mode[m in Modes] optional size m.pt;
dexpr int totaltime = sum(m in Modes) presenceOf(mode[m]) * ( m.pt); //boolean expression
//dexpr int totalExtCost = sum(m in Modes) presenceOf(mode[m])* (m.ExtCost * m.pt);
cumulFunction IntResUsage[r in IntRes] =
sum (m in Modes: m.dmdIntRes[r]>0) pulse(mode[m], m.dmdIntRes[r]);
cumulFunction ExtResUsage[r in ExtRes] =
sum (m in Modes: m.dmdExtRes[r]>0) pulse(mode[m], m.dmdExtRes[r]);
execute {
cp.param.FailLimit = 10000;
}
minimize sum(m in Modes) (m.ExtCost * m.pt) * maxl (presenceOf(mode[m]));
//minimize max(t in Tasks) endOf(Taskss[t]);
subject to {
//Alternative mode of resource productivity in Cost's unit
forall (t in Tasks, m in Modes) {
// if(m.costprod *m.pt == 0 && 0 <= 559717712) presenceOf(mode[first(Modes)]);
alternative(Taskss[t], all(m in Modes: m.taskId==t.id) mode[m]);
}
forall (t in Tasks, m in Modes)
(sum(t in Tasks)sum(m in Modes) m.costprod * m.pt <= 285740966 in 0..NbDays-14) != presenceOf(mode[first(Modes)]);
//External resource's budget limitation
forall ( t in Tasks, m in Modes )
totaltime <= 50;
//forall ( m in Modes )
//totalExtCost <= 30000000;
//Resource Usage
forall (r in IntRes)
IntResUsage[r] <= CapIntRes[r];
forall (r in ExtRes)
ExtResUsage[r] <= CapExtRes[r];
解决方案
您能否简化您的模型以说明您的问题?我在模型中看不到任何值 50 或 25。
还:
我不明白你为什么在这里使用“最大值”:minimize sum(m in Modes) (m.ExtCost * m.pt) * maxl (presenceOf(mode[m]));
我不明白你为什么为每个任务和每个模式发布这个约束(!)。它独立于任务和模式: forall ( t in Tasks, m in Modes ) { totaltime <= 100; }
顺便说一句,出于可读性的原因,您还可以将表达式:“presenceOf(mode[m]) * (m.pt)”改写为“sizeOf(mode[m])”。如果模型持续时间是一个常数,从性能的角度来看,两个公式应该或多或少相似,但如果持续时间是一个决策变量,那么具有“sizeOf(model[m])”的公式肯定会更好。
推荐阅读
- c# - System.Drawing.Image.Save Into Stream 在.Net 5 运行时基于 Debian 的容器中运行时无法正常工作
- java - 如何在工具栏中为过滤器创建自定义弹出菜单?
- java - 为什么 jstat 元空间使用与 visualvm 监视器不同
- javascript - 我想发送缓冲区对象作为 API 的响应
- reactjs - 如何增加 Material-UI React 中的图标数量
- neural-network - apache ignite 中的数据规范化
- vue.js - 更新 vue 组件上的路径 ckeditor
- html - 我正在尝试将图标与三列 CSS 网格的每列中心的文本对齐,但图标和文本稍微偏离中心
- reactjs - 哪个更有效:对经常更新的对象使用多个 useState 挂钩或一个 useState?
- groovy - 在 Spock 中,如何根据某些条件选择数据表中的某些行来运行?