Я хочу решить вопрос о максимизации энтропии с помощью CVXPY - PullRequest
0 голосов
/ 03 мая 2020

Я использую python, но есть проблема с st-частью и двумя последними строками, я не знаю, что я сделал неправильно, и я не мог найти подобные примеры, я был бы признателен за любую помощь. enter image description here


import numpy as np
c = np.array([[3,11,18,22],
              [12,3,12,19],
              [15.5,13,5,7],
              [24,18,8,5]])
C=1200
O=[400,460,400,702]
D=[260,400,500,802]
L=4
K=4


import cvxpy as cp
x = cp.Variable((K, L), PSD=True)
obj = cp.Maximize(cp.sum(cp.entr(x)))
#error
constraints = [(for j=1 to L: cp.sum(x[:j])==O[j]), (for i =1 to L: cp.sum(x[:j])==D[i]), (cp.sum(cp.sum(c @x)) == C)]
prob = cp.Problem(obj, constraints)
opt_val = prob.solve(solver=cp.CVXOPT, verbose=True)

print("\nThe optimal value is:", prob.value)
print('\nThe optimal solution is:')
print(x.value)




1 Ответ

0 голосов
/ 07 мая 2020

Я пытался переписать ваш код:

import cvxpy as cp
import numpy as np
c = np.array([[3,11,18,22],
              [12,3,12,19],
              [15.5,13,5,7],
              [24,18,8,5]])
C=1200
O=[400,460,400,702]
D=[260,400,500,802]
L=4
K=4



x = cp.Variable((K, L),pos=True)  #pos AS X is allowed to be zero in your last constraint
obj = cp.Maximize(cp.sum(cp.entr(x)))
#error
constraints=[]
for j in range (L): 
    constraints += [cp.sum(x,axis=0)==O[j]] #Assign all the sum of columns to be equal O
for i in range (L):              
    constraints += [cp.sum(x,axis=1)==D[j]]   #Assign all the sum of rows to be equal D
constraints+=   [ (cp.sum(cp.multiply(c,x)) == C)]   # The sum of dot product of the c,x matrix equal to C

prob = cp.Problem(obj, constraints)

prob.solve()
print("\nThe optimal value is:", prob.value)
print('\nThe optimal solution is:')
print(x.value)

К сожалению, он возвращает:
Оптимальное значение: -inf
Оптимальное решение:
Нет

Я не уверен, что константы в вашем примере должны сходиться к решению. В любом случае, я надеюсь, что вы можете взять это отсюда.

...