from gekko import GEKKO
sample = [[[0, 0.5, 0, 0, 0.5], [0, 0.08, 0.92, 0, 0], [0, 0.44, 0.56, 0, 0], [0, 0, 0.84, 0.16, 0], [0.34, 0.66, 0, 0, 0], [0, 0.53, 0.47, 0, 0], [0, 0, 0.8, 0.2, 0]], [0.89, 1, 1, 1, 1, 1, 1], [[1], [1], [1], [1], [1], [1], [1]], [0, 0.5, 1, 1.5, 2, 2.3, 3]]
# Initialize Model
m = GEKKO()
#define parameter
eq = m.Param(value=1)
for i in range(0,len(sample[0])):
for j in range(0,len(sample[0][i])):
if sample[0][i][j] != None:
sample[0][i][j] = None
for j in range(0,len(sample[1])):
if sample[1][j] != None:
sample[1][j] = None
for i in range(0,len(sample[2])):
for j in range(0,len(sample[2][i])):
if sample[2][i][j] != None:
sample[2][i][j] = None
for i in range(3, len(sample)):
for j in range(0,len(sample[i])):
if sample[i][j] != None:
sample[i][j] = None
x = sample
#print(x)
for i in range(0,len(x[0])):
for j in range(0,len(x[0][i])):
x[0][i][j] = m.Var(lb=0.0,ub=1.0)
for j in range(0,len(x[1])):
x[1][j] =m.Var(lb=0.0,ub=1.0)
for i in range(0,len(x[2])):
for j in range(0,len(x[2][i])):
x[2][i][j] = m.Var(lb=0.0,ub=1.0)
for j in range(1,len(x[3])-1):
x[3][j] = m.Var(lb=0.0,ub=3.00)
x[3][0] = m.Var(lb=0.0,ub=0.000000001)
x[3][len(x[3])-1] = m.Var(lb=3.0,ub=3.0001)
#Initial value
ini = [[[0, 0.5, 0, 0, 1], [0, 0.08, 0.92, 0, 0], [0, 0.44, 0.56, 0, 0], [0, 0, 0.84, 0.16, 0], [0.34, 0.66, 0, 0, 0], [0, 0.53, 0.47, 0, 0], [0, 0, 0.8, 0.2, 0]], [0.89, 1, 1, 1, 1, 1, 1], [[1], [1], [1], [1], [1], [1], [1]], [0, 0.5, 1, 1.5, 2, 2.3, 3.0]]
for i in range(0,len(x[0])):
for j in range(0,len(x[0][i])):
x[0][i][j].value = ini[0][i][j]
for j in range(0,len(x[1])):
x[1][j].value = ini[1][j]
for i in range(0,len(x[2])):
for j in range(0,len(x[2][i])):
x[2][i][j].value = ini[2][i][j]
for j in range(0,len(x[3])):
x[3][j].value = ini[3][j]
#Constraint1 sum of all belief degree is 1
for i in range(0,len(x[0])):
m.Equation(sum(x[0][i])==eq)
#Constraint2 RV[i+1] > RV[i]
for j in range(1,len(x[3])-1):
m.Equation(x[3][j+1] - x[3][j] > 0)
#Objective
def gekko_obj(x):
belief_consequence = x[0]
rl_weight = x[1]
att_weight = x[2]
RV = x[3]
Data_Transformation(RV)
List_of_Rule()
Rule_Activation_Weight(rl_weight,att_weight)
Aggregated_Belief_and_Output(belief_consequence)
exp_output()
objective_minimize()
return objective_value
m.Obj(gekko_obj(x))
#Set global options
m.options.IMODE = 3 #steady state optimization
#Solve simulation
m.solve(remote=True) # solve on public server
#Results
print('')
print('Results')
print(x)
函数“def gekko_obj(x)”适用于任何x值。
但是,当m作为Gekko目标函数调用时,它会失败。Obj(gekko_obj(x))。
文件“/anaconda3/lib/python3.6/site packages/spyder/utils/site/sitecustomize.py”,第710行,在runfile execfile(文件名,命名空间)中
文件“/anaconda3/lib/python3.6/site packages/spyder/utils/site/sitecustomize.py”,第101行,在execfile exec(compile(f.read(),filename,'exec'),命名空间)中
文件“/Users/swaisachan/Desktop/Python files/Optimization/BRB Optimization by GEKKO1.py”,第451行,在m.Obj(gekko_Obj(x))中
文件"/用户/swatiachan/桌面/Python文件/优化 /BRB优化GEKKO1.py",第444行,gekko_objData_Transformation(RV)
文件“/Users/swaisachan/Desktop/Python files/Optimization/BRB Optimization by GEKKO1.py”,第53行,在L1[i][j]的数据_转换中
文件“/anaconda3/lib/python3.6/site packages/gekko/gk_operators.py”,第25行,在len return len(self.value)中
文件“/anaconda3/lib/python3.6/site packages/gekko/gk_operators.py”,第122行,在len return len(self.value)中
TypeError:类型为“int”的对象没有len()
数据转换功能是:
###Generate input data uniformaly
from random import randrange, uniform
global L1
L1 = []
data = []
for i in range(10):
frand = uniform(0, 3)
data.append(frand)
L1.append(sorted(data)) #Input data
print('data: '+str(L1))
header =['x']
global RV
def Data_Transformation(RV):
#print('Referential value: ' +str(RV))
global Rule_RV_list
global L3
Rule_RV_list = []
L3 = []
for i in range(0,len(header)):
global L2
L2 = []
if all(isinstance(x, (int,float)) for x in L1[i]):
global num_RV
global RV_index
Rule_RV_list.append(RV)
for j in range(0,len(L1[i])):
match = [0 for col in range(len(RV))]
intial_bl_dis = list(zip(RV, match))
print(RV)
for k in range(0,len(RV)):
if L1[i][j] > RV[k]:
a_plus = RV[k+1]
print('a plus:' +str(a_plus))
if RV.index(a_plus) > 0:
a_minus = RV[RV.index(a_plus)-1]
else:
a_minus = RV[RV.index(a_plus)+1]
alpha_minus = abs((a_plus - L1[i][j])/(a_plus - a_minus))
alpha_plus = 1 - alpha_minus
RV_index = RV.index(a_plus)
intial_bl_dis[RV_index] = (intial_bl_dis[RV_index][0],alpha_plus)
intial_bl_dis[RV_index-1] = (intial_bl_dis[RV_index-1][0],alpha_minus)
L2.append(intial_bl_dis)
L3.append(L2)
我已经发布了部分代码。
RV的元素是GEKKO变量类的实例
>>> type(RV[k])
<class 'gekko.gk_variable.GKVariable'>
在打印这些对象时,显示属性value
if L1[i][j] > RV[k].value:
看起来接下来还有一个错误,它也与GEKKO变量以有趣的方式重载运算符有关。
我正在解决这个优化问题,我需要计算出我需要打开多少个配送中心,以满足12家公司设施的需求,同时最小化运输成本。运输成本只是配送中心之间的距离乘以每英里成本,然而在这个问题中,每英里成本是一美元。我有5个选择,分别是波士顿、纳舒亚、普罗维登斯、斯普林菲尔德和伍斯特,这5个是12家公司设施的一部分。 我解决了这个问题,得到了正确的答案,但是后来我试图在同一个代码中添加两个约束,我得到的答案是不正确的。
@错误:使用序列设置数组元素 我试图确定下行风险。 我有一个回报形状的二维数组(1000,10),投资组合从100美元开始。在一行中每一个回报复合10次。对所有行都这样做。将每一行的最后一个单元格的值与最后一列值的平均值进行比较。如果值小于平均值或为零,则保留该值。所以我们将有一个(1000,1)数组。最后我找到了它的均方差。 目标是最小化均方差。约束:权重需要小于1 预期回报,即wt*ret应等
我目前正试图用Gekko的分支来解决一个混合整数非线性问题 以下是我迄今为止的尝试:
我试图用Python中的GEKKO定义一个优化问题,我想使用一些带有预定义选择列表的设计变量。此外,每个选择都有一个相关的成本,约束条件是总成本应低于指定的限制。 下面是一个常见的壁虎示例(在这里找到),修改后的x1和x2是sos1。此外,利用所选值x1和x2的索引,我从另一个列表中找到了它们的相关成本,它们的总和应该小于某个值(约束)。 注意:我必须在函数中添加一个if块作为的初始值,而似乎为零
在不同的限制条件下,我试图挑选最好的梦幻足球队。我的目标是挑选能够最大化其预测积分总和的球员。 制约因素是: 1) 团队必须包括: -1个QB -2苏格兰皇家银行 -2个WRs -1 TE 2)玩家的风险不得超过6 3) 球员的费用总额不得超过300英镑。 如何做到这一点?R中优化这些约束的最佳包/函数是什么?在给定这些约束的情况下,最大化投影点的函数调用会是什么样子?仅供参考,我将搜索100-3
我正在考虑使用cvxopt来解决一些非线性网络流优化问题。为了理解基本原理,我用一个只有4个顶点和5条边的非常简单的测试网络进行了尝试。 我的网络看起来像这样。蓝色和红色节点分别是源节点和接收器。 每个边的成本为: 其中 x 是包含每个边缘上的流的向量,而 alpha 是某个系数。我的优化问题是: 其中E是边弧入射矩阵,b是包含源和汇的矢量。因此,矩阵向量方程Ex=b应仅执行基尔霍夫定律(即每个节