Plots.jl에서 선형 계획 문제의 그래픽 해법을 살펴보십시오.

소개



최근 Julia를 사용하게 되어, 그래프의 출력에 Plots.jl를 사용합니다만, 지금 생각한 것처럼 그래프의 출력을 할 수 없고 미묘하게 막혔으므로 그래프의 출력의 연습에 선형 계획 문제의 도적 해법을 해보기로 결정했습니다.
이번 출력하는 것은 직선과 직선으로 둘러싸인 영역입니다.

선형 계획 문제



다음 문제를 해결합니다.
$$
\begin{align*}
maximize ~ & ~ x_1 + 2x_2,\\
subject ~ to ~ & ~ x_1 + 3x_2\leq 15,\\
& ~ x_1 + x_2\leq 7,\\
& ~ 2x_1 + x_2\leq 12,\\
& ~ x_1, x_2\geq 0.
\end{align*}
$$

표현식을 변형하면 실행 가능 영역을 표시하는 데 필요한 다음 표현식을 얻을 수 있습니다.
$$
x_2=-\frac{1}{3}x_1+5\\
x_2=-x_1+7\\
x_2=-2x_1+12\\
0\leq x_2\leq f(x_1), ~ s.t. ~ f(x) =
\begin{eqnarray}
\begin{cases}
-\frac{1}{3}x + 5, ~ if ~ x\in [0, 3) &\\
-x + 7 ~ if ~ x\in [3, 5) &\\
-2x + 12 ~ if ~ x\in [5, 6] &
\end{cases}
\end{eqnarray}
$$

실행 가능 영역 다이어그램 출력


using LaTeXStrings
using Plots; plots.gr()

function plotRegion!(interval, f)
    Plots.plot!(
        interval,
        f,
        fillrange = 0,
        fillalpha = 0.1,
        c = :grey,
        label = ""
    )
end

function plotFeasibleRegion()
    Plots.plot(
        x -> (-(1/3)x + 5),
        xlims = (0, 8),
        ylims = (0, 13),
        xlabel = L"x_1",
        ylabel = L"x_2",
        label = L"x_2 = -\frac{1}{3}x_1 + 5"
    )
    Plots.plot!(x -> -x + 7, label = L"x_2 = -x_1 + 7")
    Plots.plot!(x -> -2x + 12, label = L"x_2 = -2x_1 + 12")
    plotRegion!(0:3, x -> -(1/3)x + 5)
    plotRegion!(3:5, x -> -x + 7)
    plotRegion!(5:6, x -> -2x + 12)
end

plotFeasibleRegion()



영역 부분은 범례 부분에 나오고 싶지 않았으므로, label = "" 를 지정해 범례 부분으로부터 지웠습니다.
영역 부분의 묘화는 직선의 교점이 교차하는 $x_1$를 경계로 해 3개로 분할했습니다.

해의 도출



최소화하는 함수를 $k = x_1 + 2x_2$로 놓고 변형하면 $x_2 = -\frac{1}{2}x_1 +\frac{k}{2}$가 되고, 이 직선의 기울기로부터 직선이 $(3, 4)$를 통과할 때, 즉 $x_1 = 3, x_2 = 4$가 $k$가 최대가 되는 선형 계획 문제의 최적해인 것을 알 수 있습니다.

그림을 보겠습니다.
plotFeasibleRegion()
plot!(x -> -(1/2)x + 11/2, label = L"x_2 = -\frac{1}{2}x_1 + \frac{11}{2}")



결론



LaTeXStrings의 구문 하이라이트는 이상하지만 걱정하지 마십시오.
Julia 사용 처음 날이 얕기 때문에 코드 안에 개선할 수 있는 점이 있을지도 모릅니다.
뭔가 있으면 코멘트에서 지적 잘 부탁드립니다.

버전 등



도커 이미지 jupyter/datascience-notebook 2eac078be835
실행에 Jupyter Notebook 사용

Julia 1.6.0
플롯 1.11.2
LaTeXStrings 1.2.1

참고 페이지

좋은 웹페이지 즐겨찾기