Где: V: 3x3 Matrix
констант комплексных чисел
V: скалярная константа комплексных чисел
Проблема состоит в том, чтобы найти boolean
матрицу X
, которая
Свернуть Residules=cp.norm(cp.sum(cp.multiply(Vc,S))-V)
Работает следующий код:
import numpy as np
import cvxpy as cp
V= np.random.random(3)*10 + np.random.random(3)*10 * 1j
C=3+4j
X=cp.Variable((3,3), boolean=True)
Residules=cp.norm(cp.sum(cp.multiply(Vc,S))-V)
Objective= cp.Minimize(Residules)
Const1=cp.sum(X,0)<=1
Prob1= cp.Problem(Objective)
Prob1.solve()
X=np.array(X.value)
print(np.round(X))
print(Prob1.value)
Результат:
[[ 1. 0. 0.]
[ 1. -0. -0.]
[-0. 1. -0.]]
1.39538277332097
Мой вопрос: я хочу наложить ограничение на проблему, чтобы для каждого столбца в Matrix X
только один элемент может быть равен 1, а остальные должны быть нулями. Так что в каждом столбце есть максимум один элемент со значением 1. Я пробовал:
Const1=cp.sum(X,0)<=1
Prob1= cp.Problem(Objective,[Const1])
Prob1.solve()
Произошла следующая ошибка:
File "path \ Anaconda3 \ lib \ site-packages \ cvxpy \ reductions \ complex2real \ complex2real.py ", строка 95, invert dvars [vid] = solution.dual_vars [cid]
KeyError: 11196
Любой другой способ установить это ограничение ??