私は現在、オペレーションズ・リサーチを研究しています。モデルを LP モデルとして定式化する必要がありました。
目的関数は
y = ( ai * C1i + bi * C2i)
,where ai = max(0, xi - Ti) ; bi = max(0, Ti - xi)
これはスケジュールの問題です。xi はジョブ i の予定時刻の決定変数であり、Ti はジョブ i の最適な時刻です。早いまたは遅い時間単位ごとにペナルティ コストがかかります。C1i と C2i は単位あたりのペナルティ コストです。
ジョブ i がジョブ i の最適時刻 Ti よりも前に開始された場合、ペナルティ コストは次のようになります。
bi * C2i.
ジョブ i がジョブ i の最適時間 Ti の後に開始された場合、ペナルティは次のようになります。
ai * C1i.
定式化中に、Lingo または Cplex で max(,) 関数を使用するのが難しいことがわかりました。実際、プログラムには max(,) 関数はありません。タスクが Ti より前に開始された場合、ai = xi
- Ti は負になります。bi = Ti - xi
ポジティブになります。「負の場合、値が0に変わる」という変換方法が思いつきません。
以下の関数で目的を定式化することは可能ですか?
y = ( ai * C1i*yi + bi * C2i*(1-yi))
if Ti - xi >= 0
(ジョブ i の最適な時間の前に開始)、yi = 1
そうでない場合、yi =0
.
しかし、LPモデルで上記のif-then文をどのように定式化できますか?
ありがとう!