Matlab 调用 Gurobi 中具有线性约束的混合整数二次规划
Mixed Integer Quadratic Programming with linear constraints in Matlab calling Gurobi
我很难理解如何在调用 Gurobi 的 Matlab 中使用线性约束实现以下 MIQP(混合整数二次规划)。
让我以示意图的方式解释一下我的设置。
(1) x
是 unknown,它是一个大小为 225x1
的列向量。
(2) objective 函数(应该最小化到 x
)看起来像
可以改写为
我有一个计算 alpha, Q,c
(Q,c
稀疏)的 Matlab 脚本,当给定 some_known_parameters1
时:
function [alpha, Q,c]=matrix_objective_function(some_known_parameters1)
%...
end
(3) 约束在x
中是线性的,包括等式和不等式,写成如下形式
当给出 some_known_parameters2
时,我有一个 Matlab 脚本计算 Aeq,beq,Aineq,bineq
(Aeq,Aineq
稀疏):
function [Aeq,beq,Aineq,bineq]=constraints(some_known_parameters2)
%...
end
(4) x
的一些 组件被限制在 {0,1 }。当给出 some_known_parameters3
时,我有一个 Matlab 脚本生成一串字母 B
(二进制),C
(连续):
function type=binary_continuous(some_known_parameters3)
%...
end
现在,我需要使用 Gurobi 将 (1)-(4) 放在一起。我很难理解如何。我找到了 this 示例,但对我来说它看起来很神秘。下面我报告了一些我试图写的行,但它们不完整,我希望你能帮助完成它们。
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;
我只是想使用提供的字母设置 objective 函数的矩阵 here but it gives me error. The example here 在我看来
model.Q=Q;
model.obj=c;
但是我该如何设置alpha
?是不是因为它不改变解决方案的集合而忽略它?
(2) 如何将 objective 函数的最小值作为输出存储在矩阵中,而没有相应的 x
?
(1) 是的,没有必要传递常量alpha,因为它不影响最优解。 Gurobi 的 MATLAB API 只接受稀疏矩阵。此外 model.obj
始终是问题陈述中的 c 向量:
model.Q = sparse(Q);
model.obj = c;
(2) 要获得最优的objective值,首先需要将你的模型传递给gurobi并求解。然后你可以通过 objval 属性访问它:
results = gurobi(model);
val = results.objval + alpha
我很难理解如何在调用 Gurobi 的 Matlab 中使用线性约束实现以下 MIQP(混合整数二次规划)。
让我以示意图的方式解释一下我的设置。
(1) x
是 unknown,它是一个大小为 225x1
的列向量。
(2) objective 函数(应该最小化到 x
)看起来像
可以改写为
我有一个计算 alpha, Q,c
(Q,c
稀疏)的 Matlab 脚本,当给定 some_known_parameters1
时:
function [alpha, Q,c]=matrix_objective_function(some_known_parameters1)
%...
end
(3) 约束在x
中是线性的,包括等式和不等式,写成如下形式
当给出 some_known_parameters2
时,我有一个 Matlab 脚本计算 Aeq,beq,Aineq,bineq
(Aeq,Aineq
稀疏):
function [Aeq,beq,Aineq,bineq]=constraints(some_known_parameters2)
%...
end
(4) x
的一些 组件被限制在 {0,1 }。当给出 some_known_parameters3
时,我有一个 Matlab 脚本生成一串字母 B
(二进制),C
(连续):
function type=binary_continuous(some_known_parameters3)
%...
end
现在,我需要使用 Gurobi 将 (1)-(4) 放在一起。我很难理解如何。我找到了 this 示例,但对我来说它看起来很神秘。下面我报告了一些我试图写的行,但它们不完整,我希望你能帮助完成它们。
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;
我只是想使用提供的字母设置 objective 函数的矩阵 here but it gives me error. The example here 在我看来
model.Q=Q;
model.obj=c;
但是我该如何设置alpha
?是不是因为它不改变解决方案的集合而忽略它?
(2) 如何将 objective 函数的最小值作为输出存储在矩阵中,而没有相应的 x
?
(1) 是的,没有必要传递常量alpha,因为它不影响最优解。 Gurobi 的 MATLAB API 只接受稀疏矩阵。此外 model.obj
始终是问题陈述中的 c 向量:
model.Q = sparse(Q);
model.obj = c;
(2) 要获得最优的objective值,首先需要将你的模型传递给gurobi并求解。然后你可以通过 objval 属性访问它:
results = gurobi(model);
val = results.objval + alpha