0

我很难理解如何在 Matlab 中调用 Gurobi 来实现以下具有线性约束的 MIQP(混合整数二次规划)。

让我以示意图的方式解释我的设置。


(1) x未知数,它是一个大小为 的列向量225x1


(2)目标函数(应该最小化 wrto x)看起来像

在此处输入图像描述

可以重写为

在此处输入图像描述

当给出时,我有一个 Matlab 脚本计算alpha, Q,cQ,c稀疏) some_known_parameters1

function [alpha, Q,c]=matrix_objective_function(some_known_parameters1)

%...

end

(3)约束在中是线性的x,包括等式和不等式,写成形式在此处输入图像描述

当给出时,我有一个 Matlab 脚本计算Aeq,beq,Aineq,bineqAeq,Aineq稀疏) :some_known_parameters2

function [Aeq,beq,Aineq,bineq]=constraints(some_known_parameters2)

%...

end

(4)的 某些组件x被限制在{0,1}中。我有一个 Matlab 脚本在给出时产生一串字母B(二进制),C(连续)some_known_parameters3

function type=binary_continuous(some_known_parameters3)

%...

end

现在,我需要使用 Gurobi将(1)-(4)放在一起。我很难理解如何。我找到了这个例子,但对我来说它看起来很神秘。下面我报告一些我试图写的行,但它们不完整,我希望你能帮助完成它们。

clear 
rng default

%Define some_known_parameters1, 
 some_known_parameters2,some_known_parameters3 [...]

%1) generate alpha,Q,c,Aeq,beq,Aineq,bineq,type with Q,c,Aeq, Aineq sparse
[alpha, Q,c]=matrix_objective_function(some_known_parameters1)
[Aeq,beq,Aineq,bineq]=constraints(some_known_parameters2)
type=binary_continuous(some_known_parameters3)



%2) Set up Gurobi
clear model;
model.A=[Aineq; Aeq];
model.rhs=full([bineq(:); beq(:)]); 
model.sense=[repmat('<', size(Aineq,1),1); repmat('=', size(Aeq,1),1)];
model.Q=Q; %not sure?
model.alpha=alpha; %not sure?
model.c=c; %not sure?
model.vtype=type;
result=gurobi(model); %how do I get just the objective function here without the minimiser?

问题:

(1)我不确定

model.Q=Q; 
model.alpha=alpha; 
model.c=c;

我只是尝试使用此处提供的字母设置目标函数的矩阵,但它给了我错误。在我看来这里的例子

model.Q=Q; 
model.obj=c; 

但是那我该如何设置alpha呢?是否因为它不会改变解决方案集而忽略它?

(2)我如何获得存储在矩阵中的输出只是目标函数的最小值而没有相应的x

4

1 回答 1

1

(1) 你是对的,没有必要传递常数 alpha,因为它不会影响最优解。Gurobi 的 MATLAB API 只接受稀疏矩阵。此外model.obj,问题陈述中始终是 c 向量:

model.Q = sparse(Q); 
model.obj = c;

(2)为了得到最优的目标值,你首先需要将你的模型传递给gurobi并解决它。然后你可以通过objval属性访问它:

results = gurobi(model);
val = results.objval + alpha
于 2018-11-15T09:36:58.453 回答