scipy.optimize.minimize“ValueError:具有多个元素的数组的真值是不明确的

时间:2017-12-21 01:26:04

标签: python matrix optimization scipy

示例代码: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并尝试计算它自己但后来遇到一个值错误。虽然我错了。

我希望这是足以帮助我理解修复的信息。

0 个答案:

没有答案