python中的GEKKO类型错误

python中的GEKKO类型错误,python,mathematical-optimization,gekko,Python,Mathematical Optimization,Gekko,假设: ww是一个numpy数组 ww.shape >>>(10, 1) #C是一个numpy数组 C.形状 >>>(5, 10) 我想用python解决一个具有特定目标函数的优化问题。 以下是我为此编写的代码: 从gekko导入gekko m=GEKKO() x1=m.Var(值=0.2,lb=0,ub=1,整数=False)#浮点变量。下限=0,上限=1,初始值=0.2 x2=m.Var(值=0.2,lb=0,ub=1,整数=False)#浮点变量。下限=0,上限=1,初始值=0.2 x3

假设:

ww是一个numpy数组 ww.shape >>>(10, 1) #C是一个numpy数组 C.形状 >>>(5, 10) 我想用python解决一个具有特定目标函数的优化问题。
以下是我为此编写的代码:

从gekko导入gekko
m=GEKKO()
x1=m.Var(值=0.2,lb=0,ub=1,整数=False)#浮点变量。下限=0,上限=1,初始值=0.2
x2=m.Var(值=0.2,lb=0,ub=1,整数=False)#浮点变量。下限=0,上限=1,初始值=0.2
x3=m.Var(值=0.2,lb=0,ub=1,整数=False)#浮点变量。下限=0,上限=1,初始值=0.2
x4=m.Var(值=0.2,lb=0,ub=1,整数=False)#浮点变量。下限=0,上限=1,初始值=0.2
x5=m.Var(值=0.2,lb=0,ub=1,整数=False)#浮点变量。下限=0,上限=1,初始值=0.2
x=[x1,x2,x3,x4,x5]
#我的主观功能
m、 方程(x1+x2+x3+x4+x5==1)
#我的具体目标函数
##请记住,我在这些代码的正上方指定了ww和C数组
def目标(x):
i=0
j=0
C#u b=np.zero((1,C.shape[1]))#因此C#u b.shape应该是(1,10)
对于范围内的i(C.形状[1]):
对于范围(5)内的j:
C_b[0][i]+=math.log10(x[j]*C[j,i])
返回-和((C_b*ww)[0])
m、 Obj(目标(x))
m、 求解(disp=False)
打印(x1.value、x2.value、x3.value、x4.value、x5.value)
输出:

TypeError:必须是实数,而不是GK_运算符
错误图片:

我猜这个错误是特定目标函数的原因因为具有以下简单的目标函数:

m.Obj(x1+x2)
我没有错误!所以我猜误差来自于特定的目标函数

如何修复此错误?
问题出在哪里?

这应该适合您

从gekko导入gekko
将numpy作为np导入
nd=5;md=10
ww=np.random.rand(md)
C=np.random.rand(nd,md)
m=GEKKO()
x=m.Array(m.Var,nd,value=1/nd,lb=0,ub=1)
m、 方程(和(x)==1)
对于范围内的i(C.形状[1]):
对于范围内的j(C.形状[0]):
m、 最大化(ww[i]*(m.log10(x[j]*C[j,i]))
m、 求解(disp=True)
对于我,席在枚举(X):
打印(I+1,席值)

解决方案总是
1/nd
,这也与初始猜测相同。您可以通过将初始猜测设置为类似
1
的值来检查解算器是否收敛到该最佳解决方案(而不仅仅是在初始猜测时停止),通过更改
ww
的形状来修复错误
在解决问题之前:

ww.shape
>>>(10, 1)
修复了以下问题:

ww.shape
>>>(10, )
现在提出的算法没有任何错误或问题。这意味着它是ww形状的原因!在我将ww的形状改为(10,1)后,它得到了修复

现在假设:

ww是一个numpy数组 ww.shape >>>(10, ) #C是一个numpy数组 C.形状 >>>(5, 10) 纠正和建议的算法:

从gekko导入gekko
将numpy作为np导入
nd=5
m=GEKKO()
x=m.Array(m.Var,nd,value=1/nd,lb=0,ub=1)
m、 方程(和(x)==1)
i=0
j=0
对于范围内的i(C.形状[1]):
对于范围内的j(C.形状[0]):
m、 最大化(ww[i]*(m.log10(x[j]*C[j,i]))
m、 求解(disp=True)
对于我,席在枚举(X):
打印(I+1,席值)

为什么每次都说最佳解决方案是
[0.2,0.2,0.2,0.2,0.2]
?我复制了你的脚本并粘贴了它。每次运行此cod时都表示最佳解决方案是
[0.2,0.2,0.2,0.2,0.2]
。这不是很奇怪吗?我认为这也很奇怪,所以我使用了另一个优化工具来验证解决方案。他们给出了相同的答案。用Gekko添加函数不是问题。下面是一个例子:谢谢亲爱的教授,正如你所说,我再次编辑了这个主题。我现在使用了你的代码,但错误仍然存在。如果我先运行你的代码,然后在我的
ww
C
上运行它(你的脚本),那么它就工作了。但是我应该先运行你的整个代码的副本!这意味着,在提取代码后,可能会将一些值保存在内存中,python使用它们来执行我特定的
ww
&
C
!但是当我想第一次用
C
&
ww
执行代码时,就会出现错误。我只是更改了
C
&
ww
,然后出现了错误。我的
C
ww
似乎有问题。这部分代码应该编辑:
x=m.Array(m.Var,nd,value=1/nd,lb=0,ub=1)
n
应该改为
nd
请不要将解决方案编辑成问题。如果问题是通过一个答案解决的,那么接受这个答案。如果你有其他的解决方案,那就把它作为一个答案发布。@markrottveel哦,好的!问题是我提到教授的地方?请不要在标题中添加感谢和解答之类的内容。这就是接受和向上投票的答案(以及可选的评论)。@markrottveel好的,对不起!其实我不知道这个规则!除了[已解决的]标题和[谢谢]之类的东西,我能带回一些信息吗?只要不是解决方案,你就可以这样做。