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

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

如何在 gekko 中動態構建約束?

如何在 gekko 中動態構建約束?

慕碼人8056858 2024-01-16 10:35:32
我是 gekko 的新手,想在我的線性規劃問題中使用它。我在單獨的字典(my_vars、Cost、Min 和 Max)中有變量名稱、成本、最小和最大界限,以變量名稱作為鍵,目標是通過確定滿足約束的變量數量來最小化總成本。我做了如下;LP = GEKKO(remote=False)vars = LP.Array(LP.Var, (len(my_vars)))i=0for xi in vars:    xi.lower = Min[list(my_vars)[i]]    xi.upper = Max[list(my_vars)[i]]    i += 1這里我想使用變量原始名稱而不是xi,有什么辦法嗎?它繼續為;LP.Minimize(sum(float(Cost[list(my_vars)[i]])*vars[i] for i in range(len(my_vars))))LP.Equation(sum(vars) == 100)另外,我在兩個 pandas 數據幀文件中都有約束的左側(LHS)(變量系數)和右側(RHS)數字,并且喜歡使用 for 循環構建方程。我不知道該怎么做?
查看完整描述

1 回答

?
尚方寶劍之說

TA貢獻1788條經驗 獲得超4個贊

這是使用字典值構建問題的一種方法:


from gekko import GEKKO


# stored as list

my_vars = ['x1','x2']

# stored as dictionaries

Cost = {'x1':100,'x2':125}

Min = {'x1':0,'x2':0}

Max = {'x1':70,'x2':40}


LP = GEKKO(remote=False)

va = LP.Array(LP.Var, (len(my_vars)))? # array

vd = {}? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? # dictionary

for i,xi in enumerate(my_vars):

? ? vd[xi] = va[i]

? ? vd[xi].lower = Min[xi]

? ? vd[xi].upper = Max[xi]


# Cost function

LP.Minimize(LP.sum([Cost[xi]*vd[xi] for xi in my_vars]))?

# Summation as an array

LP.Equation(LP.sum(va)==100)

# This also works as a dictionary

LP.Equation(LP.sum([vd[xi] for xi in my_vars])==100)

LP.solve(disp=True)


for xi in my_vars:

? ? print(xi,vd[xi].value[0])

print ('Cost: ' + str(LP.options.OBJFCNVAL))

這產生了一個解決方案:


EXIT: Optimal Solution Found.


?The solution was found.


?The final value of the objective function is? 10750.00174236579

?

?---------------------------------------------------

?Solver? ? ? ? ?:? IPOPT (v3.12)

?Solution time? :? 0.012199999999999996 sec

?Objective? ? ? :? 10750.00174236579

?Successful solution

?---------------------------------------------------

?


x1 69.999932174

x2 30.0000682

Cost: 10750.001742


查看完整回答
反對 回復 2024-01-16
  • 1 回答
  • 0 關注
  • 136 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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