gpt4 book ai didi

python - 访问 GEKKO 最优解中的特定值

转载 作者:行者123 更新时间:2023-12-04 04:11:13 34 4
gpt4 key购买 nike

跟进这里之前发布的问题:

GEKKO - optimization in matrix form

我注意到,当我单独引用它们时,我可以获得 q(最优解)的特定值:

q[0,1] = [2.5432017412]q[0,2] = [3.7228765674]

我也可以单独添加这些值:

q[0,1][0] + q[0,2][0] = 6.2660783086

但是我无法使用求和函数来获取 q 的值。例如(代码:输出):

q[0].sum(): (((v1+v2)+v3)+v4)
sum(q[0,:]) : ((((0+v1)+v2)+v3)+v4)
q[0,:].sum(axis=0) : (((v1+v2)+v3)+v4)

我不确定为什么 sum 不能访问 q 中的变量。我是否需要对输出(即 q)执行任何中间操作?谢谢,

最佳答案

numpy 数组在每个行和列位置存储 gekko 对象。要访问变量 x 的 gekko 值,您需要获取 x.value[0]。您可以使用

q 矩阵转换为 numpy 矩阵
# convert to matrix form
qr = np.array([[q[i,j].value[0] for j in range(4)] for i in range(4)])

这是检查行和列约束是否得到满足的代码的完整版本。

import numpy as np
import scipy.optimize as opt
from gekko import GEKKO
p= np.array([4, 5, 6.65, 12]) #p = prices
pmx = np.triu(p - p[:, np.newaxis]) #pmx = price matrix, upper triangular
m = GEKKO(remote=False)
q = m.Array(m.Var,(4,4),lb=0,ub=10)
# only upper triangular can change
for i in range(4):
for j in range(4):
if j<=i:
q[i,j].upper=0 # set upper bound = 0
def profit(q):
profit = np.sum(q.flatten() * pmx.flatten())
return profit
for i in range(4):
m.Equation(np.sum(q[i,:])<=10)
m.Equation(np.sum(q[:,i])<=8)
m.Maximize(profit(q))
m.solve()
print(q)
# convert to matrix form
qr = np.array([[q[i,j].value[0] for j in range(4)] for i in range(4)])
for i in range(4):
rs = qr[i,:].sum()
print('Row sum ' + str(i) + ' = ' + str(rs))
cs = qr[:,i].sum()
print('Col sum ' + str(i) + ' = ' + str(cs))

这个脚本的结果是:

[[[0.0] [2.5432017412] [3.7228765674] [3.7339217013]]
[[0.0] [0.0] [4.2771234426] [4.2660783187]]
[[0.0] [0.0] [0.0] [0.0]]
[[0.0] [0.0] [0.0] [0.0]]]
Row sum 0 = 10.000000009899999
Col sum 0 = 0.0
Row sum 1 = 8.5432017613
Col sum 1 = 2.5432017412
Row sum 2 = 0.0
Col sum 2 = 8.00000001
Row sum 3 = 0.0
Col sum 3 = 8.00000002

由于求解器容差,存在轻微的约束违规。如果您想获得更精确的答案,您可以使用 m.options.ATOL=1e-6 将求解器容差调整为更像 1e-8 的值.

关于python - 访问 GEKKO 最优解中的特定值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61690309/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com