在“cvxpy”中,“TypeError:G必须是“d”矩阵”是什么意思?

2024-05-14 05:41:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图得到数独二进制整数规划(BIP)问题的解决方案。我将其建模为:

  • 网格:2D 9x9列表,每个列表包含9个二进制变量
  • 约束:标准数独规则
  • 目标:最大化(1)
  • 初始值:无,我只想得到一个示例解决方案

这是代码。当删除约束boolean=True时,没有错误。但是它如何处理布尔约束呢。我不理解“TypeError:G必须是‘d’矩阵”的含义。任何提示都会有帮助

import cvxpy as cp
import numpy as np


x = [[cp.Variable(9, boolean=True) for j in range(9)] for i in range(9)]
objective = cp.Maximize(1)
constraints = []
cs = constraints
for i in range(9):
  for j in range(9):
    # one value per square
    cs.append(cp.sum(x[i][j]) == 1)
    # unique value every row
    cs.append(cp.sum([x[k][i][j] for k in range(9)]) == 1)
    # unique value every column
    cs.append(cp.sum([x[i][k][j] for k in range(9)]) == 1)
    # unique value every box
    cs.append(cp.sum([x[(i//3)*3+k//3][(i%3)*3+k%3][j] for k in range(9)]) == 1)
prob = cp.Problem(objective, constraints)
result = prob.solve()
print("z:", result)

a = [[0 for j in range(9)] for i in range(9)]
for i in range(9):
  for j in range(9):
    for k in range(9):
      if(x[i][j].value[k] > 0):
        a[i][j] = k+1
  print(a[i])

Tags: in列表forvalue二进制range解决方案cs