「min」または「max」の代わりに特定の値に最適化する目的関数を定義することが可能であるかどうか不思議です。たとえば、いくつかの制約(ここでは省略)を持つ100に最適化したい関数があります。 目的関数(に最適化されるため):lpSolve - 目的関数を特定の値に最適化する
f(x) 3.62*x1+5.19*x2
私の目標を達成するための適切な方法でしょうか?今私は最適化を「min」または「max」に定義することしかできませんが、これは私の目標を解決しません。
フルコード:
fn.obj <- c(3.62, 5.19, 7.29, 7.76, 3.82, 4.86, 4.03, 8.81, 9.14)
require(lpSolveAPI)
model <- make.lp(0,9)
lp.control(model, sense="max", verbose="full")
set.objfn(model, fn.obj)#-8333550.82)
add.constraint(model, c(70,70,-30,70,-30,-30,-30,-30,70), ">=", 0)
add.constraint(model, c(-60,-60,40,-60,40,40,40,40,-60), ">=", 0)
add.constraint(model, c(-20,-20,80,-20,-20,80,80,-20,-20), ">=", 0)
add.constraint(model, c(30,30,-70,30,30,-70,-70,30,30), ">=", 0)
add.constraint(model, c(-30,-30,-30,-30,70,-30,-30,70,-30), ">=", 0)
add.constraint(model, c(40,40,40,40,-60,40,40,-60,40), ">=", 0)
set.bounds(model, lower=c(39232,72989,90872,63238,49579,9626,158297,300931,160556), upper=c(49041,91237,113591,79048,61974,12033,197872,376164,200696))
set.type(model, 1:9,type = "integer")
res<-solve(model)
get.variables(model)
get.objective(model)
結果:
> get.variables(model)
[1] 49041 91237 113591 79048 61974 12033 197872 376164 200696
> get.objective(model)
[1] 8333551
目的関数を最大化する必要があるときにコードが良い作品。しかし、もし私が最大化するのではなく、目的関数を例えば、したがって、同じ制約があるので、fn.obj - > 1000のx1、..、x9を見つけることができます。
オリジナルコードで私の質問を更新しました。 – Alex