Open3

多目的最適化

たきろぐたきろぐ

Circle関数

  • 入力: 2次元の操作 (design point x)
  • 出力: 2次元の目的関数値 (objective value)
function circle(x)
    θ = x[1]
    r = 0.5 + 0.5 * (2x[2] / (1 + x[2]^2))
    y1 = 1 - r * cos(θ)
    y2 = 1 - r * sin(θ)
    return [y1, y2]
end

Circle関数の可視化

  • 2次元の操作 (design point) を [0, 3] の範囲でそれぞれ変化させる
  • 関数の出力値 y_1, y_2 について,等高線をPlots.jlで描く
using Plots
gr()

xseq = 0:0.1:3
yseq = 0:0.1:3
X = repeat(reshape(xseq, 1, :), length(yseq), 1)
Y = repeat(yseq, 1, length(xseq))
Z1 = map(circle_1, X, Y)
Z2 = map(circle_2, X, Y)
c1 = contour(xseq, yseq, Z1, aspect_ratio=:equal, color=:Paired_6, xlabel="x1", ylabel="x2", title="z1")
c2 = contour(xseq, yseq, Z2, aspect_ratio=:equal, color=:Paired_6, xlabel="x1", ylabel="x2", title="z2")
p = plot(c1, c2, size=(800, 400))
savefig("contour.png")
p

たきろぐたきろぐ

ランダムに操作した場合の評価関数値の可視化

  • 上図では[0, 3]を取ってきて等高線を描画したが,今回は適当なランダムで取ってきて,いくつかの評価値 (y_1, y_2) を2次元にプロットしてみる.

たきろぐたきろぐ

パレートフロントの可視化

  • 上でサンプリングした点を入力として,パレートフロントを求めて描画する