0

Gurobi を呼び出す Matlab で線形制約を使用して次の MIQP (Mixed Integer Quadratic Programming) を実装する方法を理解するのに苦労しています。

私の設定を模式的に説明しましょう。


(1) x不明で、サイズ の列ベクトル225x1です。


(2)目的関数(これは wrto で最小化する必要がありますx) は次のようになります。

ここに画像の説明を入力

これは次のように書き換えることができます

ここに画像の説明を入力

alpha, Q,c与えられたときに(Q,cスパース) 計算するMatlabスクリプトがありますsome_known_parameters1

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

%...

end

(3)制約は で線形でxあり、等号と不等号を含み、次の形式で記述されます。ここに画像の説明を入力

Aeq,beq,Aineq,bineqが与えられたときに(Aeq,Aineqスパース)計算するMatlabスクリプトがありますsome_known_parameters2

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

%...

end

(4) の一部のコンポーネントは{0,1}x内に制限されています。与えられたときに、文字列(バイナリ)、(連続)を生成するMatlabスクリプトがあります:BCsome_known_parameters3

function type=binary_continuous(some_known_parameters3)

%...

end

では、(1)~(4)をGurobiでまとめていきます。私はどのように理解するのに苦労しています。この例を見つけましたが、私には非常に不可解に見えます。以下に、私が書き込もうとしたいくつかの行を報告しますが、それらは不完全であり、完成させるためにあなたの助けが必要です.

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