我想学习python和gekko,但我有一个问题。我想用gekko再次编写这个matlab代码,用于学习gekko。以下是运行良好的matlab代码:
%transpporatation vizeden sonra slaytı sf7.
clear
clc
adilprob = optimproblem;
xdeg = optimvar('xdeg',3,3,'LowerBound',0);
%alloys = optimvar('alloys',3,'LowerBound',0);
cost=[7 9 11;
7 11 11;
4 5 12;];
spp=[300 350 400];
dmx=[100 100 200];
%cosst= xdeg*cost;
expr=optimexpr;% optimexpr yerine = optimexpr yapsakta calısıyor.
for i=1:3
for j= 1:3
expr=expr+cost(i,j)*xdeg(i,j);
end
end
for i=1:3
const1(i)=sum(xdeg(i,:)) ;
end
for j=1:3
const2(j)=sum(xdeg(:,j)) ==dmx(j);
end
adilprob.Constraints.con1= const1(i)<=spp(i);
adilprob.Constraints.con2= const2;
%diqqat
adilprob.Objective = expr;
[sol,fval] = solve(adilprob)
这是我的gekko代码,它不起作用
from gekko import GEKKO
import numpy as np
m = GEKKO()
x = m.Array(m.Var,(4,4),lb=0)
const1=np.empty([2,0])
const2=np.empty([2,0])
expr=np.empty([3,3])
cost=([[7 ,9, 11],
[7 ,11, 11],
[4 ,5 ,12]])
spp=[300 ,350 ,400]
dmx=[100 ,100 ,200]
expr=[]
for i in range(2):
for j in range(2):
m.Obj(expr+cost[i][j]*x[i][j])
for k in range(2):
const1[k]=(sum(x[k][:]))
for m in range(2):
m.Equation(const1[m]<=spp[m])
for h in range(2):
const2[h]=(sum(x[h][:]))
for y in range(2):
m.Equation(const2[y]==dmx[y])
m.solve()
print(x)
我在用spyder运行代码。存在具有循环的约束问题
谢谢你的帮助
谢谢你的帮助,我开始学壁虎了。 现在,我正在解决一个背包问题来学习,但这次我得到了错误“int'对象不可下标”。你能看看这个代码吗?问题的根源是什么?我应该如何定义1.10矩阵
下面是一个Python gekko版本,它简化了问题陈述和解决方案
以下是一些提示:
m.Obj()
或m.Minimize()
,gekko将它们相加以给出最终的目标值李>m.Equations()
李>这里是Python中的解决方案,它的目标函数值与MATLAB相同,但在第一行和第二行(1和2)以及第三列之间分割200。这是因为这两个问题的代价(11)是相同的,所以它是一个退化解,有许多可能的最优解
相关问题 更多 >
编程相关推荐