%在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
是公交车站的集合。
请帮我。
感谢您,
阿杰