%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
はバス停のセットです。
私を助けてください。
ありがとう、
アジェイ