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

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

使用包優化

使用包優化

一只斗牛犬 2024-01-16 15:03:07
我是第一次使用 gekko,我想知道是否有任何解決方案可以用 gekko max( min (function1, function2)) 解決 max min 優化問題。我發現只有最大化和最小化功能。否則是否有任何其他 python 求解器或解決方案使用 scipy 或其他用于 python 中的優化問題?
查看完整描述

2 回答

?
慕森王

TA貢獻1777條經驗 獲得超3個贊

這可以在沒有特殊函數的情況下完成:

maximize z
z <= f1
z <= f2

(這是數學符號,不是 Python/Gekko)。

所以你只需要一個額外的變量 z 和兩個不等式。這是一個標準公式,因此了解這一點很有好處。

這種公式的缺點是我們現在處理約束中的附加非線性函數,而不是目標中的非線性函數。這可能會對性能和可靠性產生影響。一個優點是這可以防止不可微分問題。


查看完整回答
反對 回復 2024-01-16
?
慕桂英546537

TA貢獻1848條經驗 獲得超10個贊

這是一個簡單的示例,其中變量之和必須等于 15。目標是最大化變量的最小值。


max min(x1,x2,x3)

s.t. x1 + x2 + x3 = 15

最大最小或最小最大問題的標準方法是用附加變量重新表述問題Z。


?max Z

?s.t. x1 + x2 + x3 = 15

? ? ? Z <= x1

? ? ? Z <= x2

? ? ? Z <= x3

這是maximinGekko 中重新表述的問題。


from gekko import GEKKO

m = GEKKO(remote=False)

m.options.SOLVER = 1

x1,x2,x3,Z = m.Array(m.Var,4)

m.Maximize(Z)

m.Equation(x1+x2+x3==15)

m.Equations([Z<=x1,Z<=x2,Z<=x3])

m.solve()

print('x1: ',x1.value[0])

print('x2: ',x2.value[0])

print('x3: ',x3.value[0])

print('Z:? ',Z.value[0])

這給出了解決方案:


x1:? 5.0

x2:? 5.0

x3:? 5.0

Z:? ?5.0

我已在您的原始問題中添加了一些缺少的常量(默認值=1)以獲得成功的解決方案。


from gekko import GEKKO

m = GEKKO(remote=True)


alpha = m.Var(0,lb=0,ub=1)

Ps? ? = m.Var(5,lb=0,ub=10)

Pr? ? = m.Var(0,lb=0,ub=10)

PP? ? = m.Var(5,lb=0,ub=10)


PD=4; to=0.1; NP=20; grp=1; gpp=1; Nr = 1; gsr=1; gpr=1; gss=1; grs=1; Ns=1

m.Equation(grp*Pr>=(gpp*PP/((1+(gpp*PP/NP))**(1-to)-1))-NP)


def FDF1(alpha,Ps):

? ? return (gsr*(1-alpha)*Ps)/(gpr*Pp+Nr)


def FDF2(alpha,Ps,Pr):

? ? return (gss*Ps+grs*Pr+2*(np.sqrt(grs*gss*alpha*PP*Pr)))/(Ns)

Func_FDF1 = 1/2*m.log((gsr*(1-alpha)*Ps)/gpr*PP+Nr)

Func_FDF2 = 1/2*m.log(1+(gss*Ps+grs*Pr+2*(m.sqrt(grs*gss*alpha*PP*Pr)))/(Ns))

m.Maximize(Func_FDF2) #===> min(Func_FDF1, Func_FDF2)

m.solve()


print('')

print('Results')

print('Ps: ' + str(Ps.value))

print('Pr: ' + str(Pr.value))

print('alpha: ' + str(alpha.value))

這給出了解決方案:


Results

Ps: [10.0]

Pr: [10.0]

alpha: [1.0]

要解決 maximin 問題,可以添加Z變量


from gekko import GEKKO

m = GEKKO(remote=True)


alpha = m.Var(0,lb=0,ub=1)

Ps? ? = m.Var(5,lb=0,ub=10)

Pr? ? = m.Var(0,lb=0,ub=10)

PP? ? = m.Var(5,lb=0,ub=10)


PD=4; to=0.1; NP=20; grp=1; gpp=1; Nr = 1; gsr=1; gpr=1; gss=1; grs=1; Ns=1

m.Equation(grp*Pr>=(gpp*PP/((1+(gpp*PP/NP))**(1-to)-1))-NP)


def FDF1(alpha,Ps):

? ? return (gsr*(1-alpha)*Ps)/(gpr*Pp+Nr)


def FDF2(alpha,Ps,Pr):

? ? return (gss*Ps+grs*Pr+2*(np.sqrt(grs*gss*alpha*PP*Pr)))/(Ns)

Func_FDF1 = 1/2*m.log((gsr*(1-alpha)*Ps)/gpr*PP+Nr)

Func_FDF2 = 1/2*m.log(1+(gss*Ps+grs*Pr+2*(m.sqrt(grs*gss*alpha*PP*Pr)))/(Ns))


# max min(Func_FDF1, Func_FDF2)

Z = m.Var()

m.Maximize(Z)

m.Equation(Z<=Func_FDF1)

m.Equation(Z<=Func_FDF2)

m.solve()


print('')

print('Results')

print('Ps: ' + str(Ps.value))

print('Pr: ' + str(Pr.value))

print('alpha: ' + str(alpha.value))

現在給出了最大化Func_FDF1和的最小值的解決方案Func_FDF2。


Results

Ps: [10.0]

Pr: [10.0]

alpha: [0.63999999961]


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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