Please help, how I can solve it?
AnsweredHi, all.
I have expression
exp = c_2.T@y  (b  A@u).T@lmbd
where
b = np.array([50,40,30 + l,d_lim]).reshape((4,))
A = np.array([
[1.1,1.5,0.8],
[3,2.5,0.7],
[2,1,1.3],
[0,0,0]
])
u = m.addMVar(3,name='leader_strat')
lmbd = m.addMVar(4,name='lambda')
I want use m.setObjective( exp ) but I have error for transpose.

Hi Konstantin,
In the following, I omit \(c_2\) and \(y\), because both variables are not defined in your code snippet.
The expression you try to construct is
\[(bA \cdot u)^T \cdot \lambda = \sum_{i=1}^4 \left( \lambda_i \cdot \left(b_i  \sum_{j=1}^3 ( A_{i,j}\cdot u_j ) \right) \right) \]
which not a matrix object. The Python Matrix API is not meant to perform matrix operations but to construct matrix expression. For more information, see Gurobi Python Interface and Python Matrix Example.
Note that the above expression is a quadratic one, so it might be advantageous to split it into a linear and a quadratic part
import gurobipy as gp
from gurobipy import GRB
import numpy as np
b = np.array([50,40,33,44]).reshape((4,))
A = np.array([
[1.1,1.5,0.8],
[3,2.5,0.7],
[2,1,1.3],
[0,0,0]])
u = m.addVars(3,name='leader_strat')
lmbd = m.addVars(4,name='lambda')
lExpr = gp.LinExpr(0)
qExpr = gp.QuadExpr(0)
for i in range(4):
lExpr.add(lmbd[i],b[i])
for j in range(3):
qExpr.add(lmbd[i] * u[j], A[i][j])
finalExpr = lExpr  qExpr
# Set objective
m.setObjective(finalExpr, GRB.MINIMIZE)Note that your model is a nonconvex quadratic one, so you have to set the NonConvex parameter to 2.
m.setParam("NonConvex",2)
Best regards,
Jaromił
Please sign in to leave a comment.
Comments
1 comment