一変数最適化

Pythonで学ぶOptimization入門

Jasmin Ludolf

Content Developer

例: 製造における最適化

 

目的関数:

$P = 40q - 0.5q^2$

  • 一変数: 変数が1つ

数量による利益の変化。

Pythonで学ぶOptimization入門

例: 製造における最適化

 

目的関数:

$P = 40q - 0.5q^2$

  • 一変数: 変数は1つ

数量による利益の変化。

Pythonで学ぶOptimization入門

導関数の計算

 

目的関数:

$P = 40q - 0.5q^2$

導関数: 傾きの変化を表す

$\frac{dP}{dq} = 40 - q$

from sympy import symbols, diff, solve


q = symbols('q')
P = 40 * q - 0.5 * q**2
dp_dq = diff(P)
print(f"The derivative is: {dp_dq}")
The derivative is: 40 - 1.0*q
1 https://docs.sympy.org/latest/index.html
Pythonで学ぶOptimization入門

停留点

導関数が0の点で最適

  • 停留点: 導関数が0の点

最適な $q$ は次を満たす:

$\frac{dP}{dq} = 40 - q = 0$

q_opt = solve(dp_dq)
print(f"Optimum quantity: {q_opt}")
Optimum quantity: [40.0000000000000]
Pythonで学ぶOptimization入門

極大・極小・どちらでもない?

 

数量による利益の変化。

 

目的関数:

$p = 40q - 0.5q^2$

q_opt = solve(p_prime)
print(f"Optimum quantity: {q_opt}")
Optimum quantity: [40.0000000000000]
Pythonで学ぶOptimization入門

凸性と凹性

 

凹関数。

  • 極大

 

凸関数。

  • 極小
Pythonで学ぶOptimization入門

二階微分

 

  • 導関数の導関数
  • 変数変化に伴う傾きの変化率

 

  • 点での2階微分が $< 0$: 極大
  • 点での2階微分が $> 0$: 極小
  • 点での2階微分が $= 0$: どちらでもない

数量による利益の変化。

Pythonで学ぶOptimization入門

例: 極大・極小・どちらでもない?

 

一次導関数:

$\frac{dp}{dq} = 40 - q$

 

二階導関数:

$\frac{d^2p}{dq^2} = -1 < 0$

  • 極大!

 

d2p_dq2 = diff(dp_dq)

sol = d2p_dq2.subs('q', q_opt)
print(f"The 2nd derivative is: {sol}")
The 2nd derivative is: -1.0000000000000
Pythonで学ぶOptimization入門

最適化における微分

 

  • 一次導関数
    • 最適化で停留点を見つける
  • 二階導関数
    • 極小極大かを判定
Pythonで学ぶOptimization入門

練習しましょう!

Pythonで学ぶOptimization入門

Preparing Video For Download...