示例代码:https://pastebin.com/L8qV1eWQ
链接到PDF /代码图片:https://imgur.com/tiPcB8M
import numpy as np
from scipy.optimize import minimize
import math as m
import random
#Inputs:
## X = A 100x6 array of 600 organized variables.
def func(X):
x = 0
for i in range(0,100):
for j in range(0,6):
x = x = X[i][j]
return -1.0*x
#Inputs:
## a = the A matrix constructed below
## d = the d array constructed below
#Outputs:
# res - result of optimization
def Optimize(a,c,d):
###Constraints###
cons = list()
for i in range(0,100):
cons.append(
{'type' : 'ineq',
'fun' : lambda X : np.array([ X[i][0]+X[i][1]+
X[i][2]+X[i][3]+X[i][4]+X[i][5]-d ]),
'jac' : lambda X : np.ones(6) })
for j in range(0,6):
cons.append(
{'type' : 'ineq',
'fun' : lambda X : np.array([
X[0][j]+ X[1][j]+ X[2][j]+ X[3][j]+ X[4][j]+
X[5][j]+ X[6][j]+ X[7][j]+ X[8][j]+ X[9][j]+
X[10][j]+X[11][j]+X[12][j]+X[13][j]+X[14][j]+X[15][j]+
X[16][j]+X[17][j]+X[18][j]+X[19][j]+
X[20][j]+X[21][j]+X[22][j]+X[23][j]+X[24][j]+X[25][j]+
X[26][j]+X[27][j]+X[28][j]+X[29][j]+
X[30][j]+X[31][j]+X[32][j]+X[33][j]+X[34][j]+X[35][j]+
X[36][j]+X[37][j]+X[38][j]+X[39][j]+
X[40][j]+X[41][j]+X[42][j]+X[43][j]+X[44][j]+X[45][j]+
X[46][j]+X[47][j]+X[48][j]+X[49][j]+
X[50][j]+X[51][j]+X[52][j]+X[53][j]+X[54][j]+X[55][j]+
X[56][j]+X[57][j]+X[58][j]+X[59][j]+
X[60][j]+X[61][j]+X[62][j]+X[63][j]+X[64][j]+X[65][j]+
X[66][j]+X[67][j]+X[68][j]+X[69][j]+
X[70][j]+X[71][j]+X[72][j]+X[73][j]+X[74][j]+X[75][j]+
X[76][j]+X[77][j]+X[78][j]+X[79][j]+
X[80][j]+X[81][j]+X[82][j]+X[83][j]+X[84][j]+X[85][j]+
X[86][j]+X[87][j]+X[88][j]+X[89][j]+
X[90][j]+X[91][j]+X[92][j]+X[93][j]+X[94][j]+X[95][j]+
X[96][j]+X[97][j]+X[98][j]+X[99][j]
-c]),
'jac' : lambda X : np.ones(100)})
bnds = list()
for i in range(0,100):
for j in range(0,6):
bnds.append((0,A[i][j]))
res = minimize(func, np.zeros(shape=(100,6)), jac=np.ones(600), bounds =
bnds, constraints=cons, method='SLSQP', options={'disp': True})
return res
##Create sample matrix and arrays of values##
A = np.zeros(shape=(100,6))
def p1(A,temp):
for i in range(0,temp.size):
j = int(random.uniform(0, 6))
A[i][j] = temp[i]
return A
numbers = np.array([4*(m.ceil(0.05*m.e**(0.08*i))) for i in range(0,100)])
A = p1(A,numbers)
d = [[] for i in range(0,100)]
for i in range(0,100):
d[i] = np.hstack(np.random.poisson(lam=(m.ceil(0.05*m.e**(0.08*i))),
size=(1)))
Optimize(A,370,d)
我正在制作一个复制2017年论文结果的项目。 本文的一部分涉及解决一个称为的特定优化问题 最大流量问题。 我已经构建了一个足够规模的简单示例来复制问题 我有。我是python中使用优化算法的新手。
问题似乎是具有正常不平等的线性优化问题 沿每行总和的约束,以及每个特定元素上每列和框约束或边界的总和。
所以我对行和和列和约束使用约束参数 然后我使用bounds参数来绑定每个单独的矩阵元素。
我得到的错误似乎来自雅各布。 由于我的问题以矩阵的形式给出,我假设矩阵的每个元素都是它自己的变量并且是线性的,矩阵是100 x 6,所以600个线性变量,因此梯度将是1的向量长度600
似乎该算法不接受我的jacobian并尝试计算它自己但后来遇到一个值错误。虽然我错了。
我希望这是足以帮助我理解修复的信息。