lpSolve - 将目标函数优化为特定值

时间:2016-06-02 08:59:21

标签: r lpsolve

我很好奇是否有可能将目标函数定义为针对特定值进行优化而不仅仅是“最小化”。或者' max'。例如,我有一个函数,我想优化到100有一些约束(这里省略)。 目标函数(优化为 100 ):

    f(x) 3.62*x1+5.19*x2

实现目标的正确方法是什么?现在我只能定义优化到最小值。或者' 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

当需要最大化目标函数时,代码很有效。但是,如果我不想最大化但是要优化我的目标函数,例如7000.所以有相同的约束我想找到可能的x1,..,x9为我的fn.obj - &gt; 1000。

1 个答案:

答案 0 :(得分:1)

如果您为目标值指定的值对应于可行解决方案,则只需将其添加为约束即可。 1000和7000似乎不对应任何可行的解决方案,但假设我们希望目标等于8000000而不是8333551.然后添加此约束并重新运行模型。

add.constraint(model, fn.obj, "=",  8000000)