[英]How to minimize cost function define over volume omega using BFGS algorithm?
[英]How to define cost objective function
我想客觀 function 以盡量減少由於進度計划的不同進度造成的影響,因為真正的進度晚了。 我想通過計划來盡量減少外部資源外部資源持續時間成本
tuple Precedence {
key int id;
{int} succs;
int RelDate;
int VolCost;
}
{Precedence} Precedences = ...;
tuple Mode {
key int taskId;
key int id;
int pt;
int costprod;
int dmdIntRes [IntRes];
int dmdExtRes [ExtRes];
int Extcost ;
}
{Mode} Modes = ...;
dvar interval Tasks [p in Precedences]in p.RelDate..EndMax ; //in p.RelDate..EndMax in 0..EndMax
dvar interval mode[m in Modes] optional size 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)
(100000 * maxl ());
subject to {
forall (p in Precedences, m in Modes) {
alternative(Tasks[p], all(m in Modes: m.taskId==p.id) mode[m]);
}
forall (p in Precedences, m in Modes)
(sum(m in Modes) m.costprod * m.pt >= 559717712 in 1..7)== presenceOf(mode[first(Modes)]);
forall (r in IntRes)
IntResUsage[r] <= CapIntRes[r];
forall (r in ExtRes)
ExtResUsage[r] <= CapExtRes[r];
forall (p1 in Precedences, p2id in p1.succs)
startBeforeEnd (Tasks[p1], Tasks[<p2id>]);
}
謝謝
我認為有兩個問題:
1- 我了解目前正在執行的計划與最初的計划相比晚了。 但不清楚 (a) 您是否想從頭開始重新安排剩余的任務,以查看是否有改進的空間(在這種情況下,您希望最小化與原始計划中相同的標准,例如制造時間) 或 (b) 您想重新安排剩余的任務,以盡量減少原始標准和新標准的混合,該標准包括找到與前一個標准“不太遠”的解決方案,以最大限度地減少中斷的計划。
在情況(a)中,您只需要確定哪些任務已經執行並在 model 中“凍結”它們(通過固定它們的開始時間:startOf(Task[t])==STARTED_AT[t]),甚至更好,從 model 中刪除它們(但是您需要在計划的執行邊界處編寫一些約束(資源的可用性配置文件,任務的最小統計時間)。
在情況 (b) 中,您還需要修改目標 function。 您需要正式確定衡量當前正在執行的計划與新計划之間距離的標准。 一個(也許太天真)的例子可能是最小化任務到其原始日期的各個距離的總和:
dexpr int impact = sum(t in Tasks) abs(startOf(Task[t])-START_IN_ORIGINAL_SCHEDULE[t]))
您可以將這個新標准與原始標准混合(使用加權和或詞典目標)
順便說一句,我會在你的 model 中重命名元組 Precedence,這真的是誤導,這個元組不代表優先級,而是一個任務......
2-您應該通過最小化外部資源來正式化您的意思。 在當前的 model 中,我看到給定模式下任務對外部資源的單獨使用是固定的,並且您在 model 的元組中有一個 ExtCost 字段。 因此,我假設您希望最小化計划的總外部資源成本,例如:
dexpr int totalExtCost = sum(m in Modes) presenceOf(mode[m])*m.Extcost;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.