4

我正在解决这个多目标问题

在此处输入图像描述

    f1(x,y) = x
    f2(x,y) = (2.0-exp(-((y-0.2)/0.004)^2)-0.8*exp(-((y-0.6)/0.4)^2) )/x

    isdefined(:f1) || JuMP.register(:f1, 2, f1, autodiff=true)
    isdefined(:f2) || JuMP.register(:f2, 2, f2, autodiff=true)

    m = Model(solver=IpoptSolver(print_level=0))
@variable(m, 0.1 <= x <= 1.0)
@variable(m, 0.0 <= y <= 1.0)
@variable(m, alpha1)
@variable(m, alpha2)
@NLobjective(m, Min, alpha1 + alpha2)
@constraint(m, f1(x,y) - z1_id >= -alpha1)
@constraint(m, f1(x,y) - z1_id <= alpha1)

@NLconstraint(m, f2(x,y) - z2_id >= -alpha2)
@NLconstraint(m, f2(x,y) - z2_id <= alpha2)
solve(m)
x_opt = getvalue(x)
y_opt = getvalue(y)

println("GOAL Programming (p=1): F1 = $(f1(x_opt, y_opt)), F2 = $(f2(x_opt, y_opt))")

它应该有两个解决方案。我只用 getvalue(x) 得到第一个,我怎样才能得到所有其他的?

4

1 回答 1

1

我遇到了类似的事情,但在整数编程中。尽管如此,当我寻找答案时把我带到了这里,这似乎是一个分享我想法的好地方。

对我来说,解决这个问题的方法似乎是首先解决系统,然后添加一个约束,即先前找到的解决方案现在不可行。我的想法是按照以下内容附加:

solve(m)
x_opt = getvalue(x)
y_opt = getvalue(y)
println("GOAL Programming (p=1): F1 = $(f1(x_opt, y_opt)), F2 = $(f2(x_opt, y_opt))")

eps = 1.e-15
@constraint(m, x - x_opt <= eps)
@constraint(m, x - x_opt >= eps)
@constraint(m, y - y_opt <= eps)
@constraint(m, y - y_opt >= eps)
solve(m)
println("GOAL Programming (p=1): F1 = $(f1(x_opt, y_opt)), F2 = $(f2(x_opt, y_opt))")

我在一个循环中为我的整数编程做了同样的事情,即将最后几行包装在 中while solve(m) == :Optimal,以找到更多选项。

于 2018-10-18T11:58:57.463 回答