%在matlab界面中使用gurobi优化器解决MILP的示例如下:
function[] = mip1()
names = {'x'; 'y'; 'z'};
try
clear model;
model.A = sparse([1 2 3; 1 1 0]);
model.obj = [1 1 2];
model.rhs = [4; 1];
model.sense = '<>';
model.vtype = 'B';
model.modelsense = 'min';
clear params;
params.outputflag = 0;
params.resultfile = 'mip1.lp';
result = gurobi(model, params);
disp(result)
for v=1:length(names)
fprintf('%s %d\n', names{v}, result.x(v));
end
fprintf('Obj: %e\n', result.objval);
catch gurobiError
fprintf('Error reported\n');
end
end
======================================
运行此代码后,我们输出如下:
status: 'OPTIMAL'
versioninfo: [1x1 struct]
objval: 1
runtime: 0
x: [3x1 double]
slack: [2x1 double]
objbound: 1
itercount: 0
baritercount: 0
nodecount: 0
x 0
y 1
z 0
Obj: 1.000000e+000
=========================================
现在我想概括一下这段代码来解决校车路由问题。
我已经建模了这样的SBRP问题:
minimize sum_{i!=j} c_{ij} x_{ij}
subject to sum_{j=1}^{n} x_{ij} = 1, for i=1,2,...,n
sum_{i=1}^{n} x_{ij} = 1, for j=1,2,...,n
sum_{i,j \in s} <=|s|-v(s);
s c V\{1};
|s|>=2;
x_{ij} \in {0,1}; i,j =1,2,...,n; i!=j
c_{ij}
是费用
v(s)
是在最佳解决方案中访问s
的所有顶点所需的车辆数量的下限。
S
是V/{1}
的子集,其中V
是公交车站的集合。
请帮帮我。
感谢你,
的Ajay
答案 0 :(得分:1)
您可能希望迭代地添加子消除约束(因为它们有很多)。你想这样做:
通过这种方法,通过超过大约10次停止将实例解决为最优性通常很困难。