0

したがって、すべての変数が整数で、すべて 3 のような数の倍数である最適なソリューションを持つこの IP を作成しようとしています (したがって、ソリューションの変数は 0、3、6 のいずれかである必要があります)。 、9、12など)

私は R でコーディングしており、解が整数 (all.int = TRUE) でなければならないという制約を設定するのは非常に簡単ですが、それを数値の倍数にする方法がわかりません。Ax <= b 式の中でどのような変更を加える必要がありますか? あなたの助けは大歓迎です! 今のところ、実際にそれを行う方法についてかなり迷っています

4

2 に答える 2

2

これを行うには、整数変数 x を定義してから を定義しますy = 3*x。現在yは整数で、3 の倍数です。

たとえば、10 以下の 3 の最大倍数を見つける自明な IP を考えてみましょう (もちろん、ここでの主な動機は、これをより複雑な整数プログラムに埋め込むことです)。あなたはこれを行うことができます:

library(lpSolve)
mod <- lp(direction = "max",
          objective.in = c(0, 1),  # (x, y)
          const.mat = rbind(c(3, -1),  # 3x - y = 0
                            c(0, 1)),  # y <= 10
          const.dir = c("=", "<="),
          const.rhs = c(0, 10),
          all.int = TRUE)
mod$solution[2]
# [1] 9
于 2015-07-30T16:11:41.533 に答える
-2

私が理解しているように、あなたの基準は答えの mod 3 が 0 であるということです。もしそうなら、mod(intResult,3) == 0 はどうですか?

私はあなたの言語で書いていないので、上記は有効な R ではないかもしれませんが、mod が intResult modulo 3 を返す関数の名前であると仮定すると、上記は有効な C であるため、理解できると思います。

于 2015-07-30T16:15:10.663 に答える