【问题标题】:I want to solve an Entropy Maximization question with CVXPY我想用 CVXPY 解决熵最大化问题
【发布时间】:2020-05-03 00:04:33
【问题描述】:

我正在使用 python,但 s.t. 有问题。部分和最后 2 行, 我不知道我做错了什么,我找不到任何类似的例子, 我将不胜感激任何帮助 。


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)




【问题讨论】:

  • 在 Python 中编程时不能使用 Julia 语法。它们是两种不同的编程语言。
  • 但是 cvxpy 不是用于 python 吗?
  • 是的,但是您复制的代码是 Julia 代码,而不是 Python 代码。复制粘贴是邪恶的,但你把它带到了新的高度。
  • 但它是用 cvxpy 样本编写的
  • 请出示参考资料。

标签: python mathematical-optimization entropy cvxpy


【解决方案1】:

我试图重写你的代码:

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 i in range (K): 
    constraints += [cp.sum(x,axis=0)==O[i]] #Assign all the sum of columns to be equal O
for j 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
最优解是:
没有

我不确定您示例中的常量是否应该收敛为解决方案。不管怎样,我希望你能从这里拿走它。

【讨论】:

  • 感谢您的努力,我将再次更改编码以查看它是否适用于其他求解器,并且出现错误“cvxpy.error.SolverError:候选圆锥求解器([' CVXOPT']) 不支持问题输出的锥体(ExpCone,PSD),或者问题中没有足够的约束。”虽然有人说这个求解器支持这个问题
  • @Aisa.Imn 您的代码中的“PSD=True”可能不是必需的。我不认为你真的想要一个半定义矩阵变量。可能“pos=true”就是你的意思。
猜你喜欢
  • 2020-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-07
  • 1970-01-01
  • 1970-01-01
  • 2021-06-30
相关资源
最近更新 更多