区分定数の目的関数を持つ R を使用して最小化問題を解きたいと思います。アイデアは、(整数) 決定変数xの値が小さいほど、値が大きい場合よりもペナルティ コストが高くなるということです。いくつかの制約を考慮して、総ペナルティ コストを最小限に抑えたいと考えています。
したがって、私のプログラムは次のようになります。
min P(x)
s.t. A x <= b
x >= 0
P ( x )はベクトルxのすべての要素の合計です。ライブラリの関数と組み合わせて使用できないことはわかっています。ただし、非常に多くの追加変数を指定せずにこれを行う方法を見つけることはできません。さらに、広範なインターネット検索では、役立つアイデアは何も得られませんでした。lp()
linprog
この関数Pがどのように見えるかの例を挙げましょう
[,1] [,2] [,3] [,4] [,5] [,6]
21 11 9 9 0 0
45 28 17 17 6 0
14 0 0 0 0 0
17 11 11 5 5 0
26 11 0 0 0 0
38 18 18 13 0 0
これは次のように読む必要があります。x1=2の場合、11 のペナルティ コストが発生します。x6=4の場合、13 のペナルティ コストが発生します。つまり、 に対してx=c(2, ..., 4)
、それがP=c(11, ..., 13)
あり、総ペナルティ コスト (目的値) はsum(11, ..., 13)
です。
私の行列A (完全にユニモジュラーです) とベクトルbは次のようになります。
A <- matrix(c(1,0,1,0,0,1,1,0,0,1,0,0,0,1,0,1,1,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1),nrow=6)
b <- c(4,5,1,5,2,4)
.
だから、私の質問は:
Rを使用して区分定数目的関数の最小値を見つけるにはどうすればよいですか?