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
참고 페이지
Reference
이 문제에 관하여(Plots.jl에서 선형 계획 문제의 그래픽 해법을 살펴보십시오.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/sanbasan/items/bc4f392ad989f4af826d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)