簡體   English   中英

如何定義成本目標 function

[英]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. 最大限度地減少“由於實際進度遲到而導致進度與進度計划不同的影響”
  2. 盡量減少“外部資源”

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM