亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在不同的步驟中運行優化問題?

如何在不同的步驟中運行優化問題?

慕容森 2022-08-02 17:22:32
我在AMPL中有一個優化問題。我想知道如何在不同的步驟中使用自己的算法運行優化?我應該使用AMPL或Python或其他軟件嗎?這是我想做的:我想逐層搜索可行的統治。例如,如果我的問題在維度 3 中,我想在 3 個圖層中搜索,例如:first layer :  x1+x2+x3=1second layer:  x1+x2+x3=2third layer:    x1+x2+x3=3在每個層中,我都有一些新的約束,當搜索在該層中時,這些約束將處于活動狀態。假設 、 分別是層 1、2 和 3 的約束。我希望問題按如下方式運行:C1C2C3首先在第一層運行,并且必須處于活動狀態:C1          `x1+x2+x3=1`   and `C1`     are active.  (the constraints C2 ,C3 and 2 other layers are non-active)然后在第二層中運行并且必須處于活動狀態:C2          `x1+x2+x3=2`   and `C2`     are active.  (the constraints C1 ,C3 and 2 other layers are non-active)第三層在第三層運行,必須處于活動狀態:C3          `x1+x2+x3=3`   and `C3`     are active.  (the constraints C1 ,C2 and 2 other layers are non-active)
查看完整描述

1 回答

?
元芳怎么了

TA貢獻1798條經驗 獲得超7個贊

您可以使用腳本在 AMPL 中執行此操作。例如:


reset;

option solver gurobi;

param n_x := 3;

var x{1..n_x};


param bignum := 1e4;


param layer;

set layers := 1..n_x;


s.t. sum_constraint: x[1] + x[2] + x[3] = layer;


s.t. c1a: x[1] >= (if layer = 1 then 10 else 10-bignum);

s.t. c1b: x[1] <= (if layer = 1 then 10 else 10+bignum);

# on layer 1, constrain x[1] = 10, otherwise leave it effectively unconstrained


s.t. c2a: x[2] >= (if layer = 2 then 20 else 20-bignum);

s.t. c2b: x[2] <= (if layer = 2 then 20 else 20+bignum);


s.t. c3a: x[3] >= (if layer = 3 then 30 else 30-bignum);

s.t. c3b: x[3] <= (if layer = 3 then 30 else 30+bignum);



minimize of: x[1]^2+x[2]^2+x[3]^2;


for {i in layers}{

    let layer := i;

    printf "\nLayer = %1.0f\n", layer; 

    solve;

    display x;

}

您還可以使用 和 語句來打開和關閉約束,具體取決于您希望自動執行約束的程度。droprestore


查看完整回答
反對 回復 2022-08-02
  • 1 回答
  • 0 關注
  • 108 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號