M
ISSN2188−1200
著者 :
神山直之・畔上秀幸
九州大学マス・フォア・インダストリ研究所
九州大学マス・フォア・インダストリ研究所
九州大学大学院 数理学府
著
者 :
神
山
直
之
・
畔
上
秀
幸
最適化理論の基礎と応用
平成29年度 AIMaPチュートリアル
最
適
化
理
論
の
基
礎
と
応
平成
29
年度
AIMaP
チュートリアル
最適化理論の基礎と応用
About MI Lecture Note Series
The Math-for-Industry (MI) Lecture Note Series is the successor to the COE Lecture
Notes, which were published for the 21st COE Program “Development of Dynamic
Mathematics with High Functionality,” sponsored by Japan’s Ministry of Education,
Culture, Sports, Science and Technology (MEXT) from 2003 to 2007. The MI
Lec-ture Note Series has published the notes of lecLec-tures organized under the following two
programs: “Training Program for Ph.D. and New Master’s Degree in Mathematics as
Required by Industry,” adopted as a Support Program for Improving Graduate School
Education by MEXT from 2007 to 2009; and “Education-and-Research Hub for
Mathematics-for-Industry,” adopted as a Global COE Program by MEXT from 2008 to
2012.
In accordance with the establishment of the Institute of Mathematics for Industry (IMI)
in April 2011 and the authorization of IMI’s Joint Research Center for Advanced and
Fundamental Mathematics-for-Industry as a MEXT Joint Usage / Research Center in
April 2013, hereafter the MI Lecture Notes Series will publish lecture notes and
pro-ceedings by worldwide researchers of MI to contribute to the development of MI.
October 2014
Yasuhide Fukumoto
Director
SEYQ
ĽĺðĜÛ±2ÿbtxmscw|/k{rszf/3 ("
""#('#"$#)%*'!'& '#%!S+2ÿ-ÿŏOî-Ô±OR®īQ[^cw
|/kđéRIYR½ªĔü{i0Œñ.ÿ®ī{i3Ġ§£.Īºÿŏ½ªí
įħ1NÆğC_Ivrs/h¶½ª¦Ĵa<¹=+ľă įħ[]
į¢:?Mÿ-ÿŏOîļŊ-Ô±OR®īaþüF^Đ÷ĤPâ]ĐXNF,´åę~m-zfb-cp
ms½ªí01; Û«ĦOP]+ĎË Rÿ-ÿŏ§£O®ŕĖāağ<+î-Ô
±QĊÐF^ÿ-ÿŏVRu/naĆ²ĤQıµDM+ňě»QUC`D7ÿ-ÿŏ½
ªÞOR®īQ[^½ªaĔüF^ÖĐXaÆğF^AOaŇĶODM7WF,
ĨÛ±R¡ODM+ į ¼ ĭQ q/sb 2ÎĥŏŘR¦ďOō3a
Í7IDWDI,A_S
Û±OËő½ªıłý¨êø°§Æ01ORŗ¸¥2-C<;?- ÊĬk}ld4ÿy/;ĀaĿ8^ 53 į ¼ ĭRì
ĭQÜÙC_IZRNF,³įOXQèŎĂaēDM7^ÎĥŏŘOHRÔ±VRōQL7M+Ń
q/sb NSĚċNŋĠR ŅR½ªÞQĵĉʼnÂ?RĮʼnĤÈ©aÇKM7IJ<W
DI,ARhq/w/sS+ÑÞRXP\GĵÑÞQėDMZ+ĨļŊR¦ďÛÉRŀQ¬
D+WI+ĈĞĤõŁaģ¬F^IY+È©ÚŔaO]WOYIZRNF,
q/sb RčIJQS+ŐÓÎĥŏŘRàãĚýÞN+řĹ×Ģ½ªíOĬNHRÝÜĒ
Nę<Păa6@M7^ûÒġİë¯ä0´åę~m-zfb-cpms½ªí1Q2ċ·º
łĮʼn3OěDMċ·ºłRŏŘĤ¦ď9[TĉōozsdebaōDI¾ÜĤPňěRłaB
ò7IJ<WDI,ÀIJS+ºÕ§aōDI·öÎĥŏŘRycgbubN+ąĸćºVRōN
ę<Păa6@MA\_Iijóæįä0Ņ¿ęõŁ½ª1QBĝĨ7IJ<WDI,2·ö
ÎĥŏŘOąĸćºVRō3ODM+·öÎĥRŏŘĤĕņOñąĸĩRćºVRÜČĤP
ōQL7MBÈ©7IJ<+HRÀ+ÑÞRyojaō7IozsdebōRÜçaÇKM7I
J<WDI,Ń½ª;ÌÀRÿ-ōÿ½ª9[TîļŊ-Ô±VRōRïOP^AOa
¤KM7WF,
Ńq/sb S+ RB®ŕRZO+ Û±0Ľĺð1;áÍ7IDWDI,ÍQ
ÏDMS+ĭŃÿ+ĭŃōÿŏ+Īº£ŗŗÊQBÀ7IJ<WDI,ÈØańYM>
JCKIœĈĄ+ÍQB®ŕ7IJ7IŌQ+ARôa9ß]DMù>ÁŖúDó@WF,
Û± Ęķ ĻŃ Åæ
´å ~m-zfb-cpms½ªí-í
B7 D 2 B.
); BG-"%#% *@)+8
Äsiw±ÉµÙ±<}²=|TVÃÑ Ï
$"
¡Î
?/1(FCH
8ª ¾È ¢¹ qd7m_[7\yfdiu¥
Ý8
7± غN¿@TPÜá khix9`mw9
7± غNßãÀ³ Õ¿ß6»ÂLqhgyaM@DWÜ6´¸¬
7± غYCHSN 2-")( Nt\ntu . N¦
,0
/<5A'JL=E>1&I
8ʧ £:Ö¹ ¹{¨Ò;
Ý8
7˱ غLGKRHLBNÁ¯ØºNǽLÔ
7Á¯ØºN⶷©ÁغQN¼
7ͯQNÜáN¦
7+YÜ?H ¤: ¤MFXWÓOlebyYEÜzCIF?5;
34!%9:6K
7ÌÝmZ\v
+8 TVf]yw9jG4\ydi9vGKCIF?5
"--*000 + ')+! )0(&)*"*
+s\yp9c8
"--*000 + ')+!
¤owatr8N]^np9cM>Wuy`AUf]yw9jGKCIF?5
"--*,#'*#'#%2.,"..$*0*/(- %
:mZ\vQN¾®uy`8
目次
線形計画法入門
神山
直之
(
九州大学
マス・フォア・インダストリ研究所
)
形状最適化理論と製品設計への応用
畔上
秀幸(名古屋大学
大学院情報学研究科)
・・・・・・・・・ 1
線形計画法入門
概要
1
線形計画問題
2
Python
PuLP
3
最大流問題
4
Python
NetworkX
5
端点解
6
最大
問題
7
双対問題
8
和
9
演習
線形計画法入門
神山 直之
最適化問題
?
最適化問題
?
最適化問題
=
「
入力
」
+
「
目的
」
入力
:解 候補集合
F
目的関数
f
:
F
→
R
目的
:
f
(
x
)
最小化
x
∈
F
見
例1:
F
=
{
x
∈
R
| −
1
≤
x
≤
1
}
,
f
(
x
) =
x
2
−
x
例2:
F
=
{
X
⊆
N
|
∑
i
∈
X
c
(
i
)
≤
B
}
,
f
(
X
) =
B
−
∑
i
∈
X
c
(
i
)
N
=
有限集合
,
B
∈
Z
+
,
c
:
N
→
Z
+
概要
1
線形計画問題
2
Python
PuLP
3
最大流問題
4
Python
NetworkX
5
端点解
6
最大
問題
7
双対問題
8
和
9
演習
線形計画問題
?
線形計画問題
?
f
F
「線形」
最適化問題
f
=
x
1
+
x
2
x
1
x
2
F
f
=
x
1
+
x
2
x
1
x
2
F
x
∗
本講義
:線形計画問題 基礎 理論的応用
最適化問題
?
最適化問題 形式的
以下
書
Minimize
f
(
x
)
subject to
x
∈
F
- “Minimize”
最小化 表
横 目的関数 書
- “subject to”
制約 書
集合
幾
式
f
(
x
)
最小値 達成
x
∗
∈
F
最適解
最適解
x
∗
対
f
(
x
∗
)
最適値
注意
:実 色々細
最適解 存在性
線形計画問題 例
必要 栄養
食事 考
問題
食品
A
:価格
= 2
,
栄養
1
= 3
,
栄養
2
= 2
食品
B
:価格
= 3
,
栄養
1
= 2
,
栄養
2
= 6
必要 栄養量:栄養
1
= 5
,
栄養
2
= 8
=
⇒
最小 価格 必要 栄養 確保
?
以下
線形計画問題
Minimize
2
x
1
+ 3
x
2
subject to
3
x
1
+ 2
x
2
≥
5
2
x
1
+ 6
x
2
≥
8
x
1
≥
0
, x
2
≥
0
線形計画問題 例
必要 栄養
食事 考
問題
食品
A
:価格
= 2
,
栄養
1
= 3
,
栄養
2
= 2
食品
B
:価格
= 3
,
栄養
1
= 2
,
栄養
2
= 6
必要 栄養量:栄養
1
= 5
,
栄養
2
= 8
=
⇒
最小 価格 必要 栄養 確保
?
x
1
=
食品
A
量 表 変数
x
2
=
食品
B
量 表 変数
最小化
価格
= 2
x
1
+ 3
x
2
制約
=
栄養
1
:
3
x
1
+ 2
x
2
≥
5
,
栄養
2
:
2
x
1
+ 6
x
2
≥
8
線形計画問題
線形計画問題
入力
:
m
×
n
行列
A
∈
Q
m
×
n
n
次元
c
∈
Q
n
m
次元
b
∈
Q
m
目的
:
以下 最適化問題 最適解 求
Minimize
c
⊤
x
subject to
Ax
≥
b
x
∈
R
n
+
行列 用
表現
以下 線形計画問題
Minimize
2
x
1
+ 3
x
2
subject to
3
x
1
+ 2
x
2
≥
5
2
x
1
+ 6
x
2
≥
8
x
1
≥
0
, x
2
≥
0
行列 用
表現
以下
Minimize
(
2
3
)
⊤
·
(
x
1
x
2
)
subject to
(
3 2
2 6
) (
x
1
x
2
)
≥
(
5
8
)
(
x
1
x
2
)
≥
(
0
0
)
線形計画問題 対
本講演 前提
線形計画法 理論・実用的 効率的 解
理論的
-
単体法,楕円体法,内点法
本講演
̸
=
解説
本講演
=
問題自体 理論的基礎・理論的応用
- CPLEX, Gurobi , GLPK
- PuLP (Python)
線形計画問題 基本性質
x
∈
R
n
線形計画問題 実行可能解
def
⇐⇒
x
∈
R
n
+
Ax
≥
b
満
定理
任意 線形計画問題 対
以下 一
成 立
1
実行可能解 存在
2
実行可能解 存在 目的関数 値 下界
3
実行可能解 存在 目的関数 値 下界
下界 達成
実行可能解 存在
証明 省略
Python
PuLP
線形計画問題 解
PuLP
-
正確
Python
仕方 例
sudo pip install pulp
以下
次 線形計画問題
PuLP
解
Minimize
8
x
+ 19
y
subject to
2
x
+ 7
y
≥
40
6
x
+ 3
y
≥
50
x
≥
0
y
≥
0
概要
1
線形計画問題
2
Python
PuLP
3
最大流問題
4
Python
NetworkX
5
端点解
6
最大
問題
7
双対問題
8
和
9
演習
PuLP
使用方法
制約 定義
problem += 2*x + 7*y >= 40
problem += 6*x + 3*y >= 50
problem += x >= 0
problem += y >= 0
問題 解
状況 確認
解 出力
status = problem.solve()
print(pulp.LpStatus[status])
print(pulp.value(problem.objective))
print(x.value())
print(y.value())
PuLP
使用方法
PuLP
import pulp
問題
作
problem = pulp.LpProblem("P",pulp.LpMinimize)
変数 定義
x = pulp.LpVariable("x")
y = pulp.LpVariable("y")
目的関数 定義
problem += 8*x + 19*y
概要
1
線形計画問題
2
Python
PuLP
3
最大流問題
4
Python
NetworkX
5
端点解
6
最大
問題
7
双対問題
8
和
9
演習
全体
import pulp
problem = pulp.LpProblem("P", pulp.LpMinimize)
x = pulp.LpVariable("x")
y = pulp.LpVariable("y")
problem += 8*x + 19*y
problem += 2*x + 7*y >= 40
problem += 6*x + 3*y >= 50
problem += x >= 0
problem += y >= 0
status = problem.solve()
print(pulp.LpStatus[status])
print(pulp.value(problem.objective))
print(x.value())
最大流問題
最大流問題
∑
a
∈
δ
(
s
)
f
(
a
)
最大化
s-t
実行可能
求
最大流問題 以下 線形計画問題 定式化
Minimize
−
∑
a
∈
δ
(
s
)
f
(
a
)
subject to
∑
a
∈
δ
(
v
)
f
(
a
) =
∑
a
∈
ϱ
(
v
)
f
(
a
) (
v
∈
V
\ {
s, t
}
)
f
(
a
)
≤
c
(
a
) (
a
∈
A
)
f
∈
R
A
+
有向
有向
D
= (
V, A
)
V
:=
点集合 呼
有限集合
,
A
⊆
V
×
V
特別 点
s, t
∈
V
関数
c
:
A
→
Q
+
対
-
関数
f
:
A
→
R
+
実行可能
s
-
t
def
⇐⇒
∀
a
∈
A
:
f
(
a
)
≤
c
(
a
)
∀
v
∈
V
\ {
s, t
}
:
∑
a
∈
ϱ
(
v
)
f
(
a
) =
∑
a
∈
δ
(
v
)
f
(
a
)
s
t
s
t
Python
実装例
problem += - x1 - x2
problem += x1 - x3 - x4 == 0
problem += x2 + x3 - x5 - x6 == 0
problem += x4 + x5 - x7 - x8 == 0
problem += x6 + x7 - x9 == 0
problem += x1 <= 1
problem += x2 <= 1
problem += x3 <= 1
problem += x4 <= 1
problem += x5 <= 1
problem += x6 <= 1
problem += x7 <= 1
problem += x8 <= 1
problem += x9 <= 1
Python
実装例
import pulp
problem = pulp.LpProblem("P", pulp.LpMinimize)
x1 = pulp.LpVariable("x1")
x2 = pulp.LpVariable("x2")
x3 = pulp.LpVariable("x3")
x4 = pulp.LpVariable("x4")
x5 = pulp.LpVariable("x5")
x6 = pulp.LpVariable("x6")
x7 = pulp.LpVariable("x7")
x8 = pulp.LpVariable("x8")
x9 = pulp.LpVariable("x9")
概要
1
線形計画問題
2
Python
PuLP
3
最大流問題
4
Python
NetworkX
5
端点解
6
最大
問題
7
双対問題
8
和
9
演習
Python
実装例
status = problem.solve()
print(pulp.LpStatus[status])
print(pulp.value(problem.objective))
print(x1.value())
print(x2.value())
print(x3.value())
print(x4.value())
print(x5.value())
print(x6.value())
print(x7.value())
print(x8.value())
print(x9.value())
答
−
2
出
正解
NetworkX
辺 加
G.add edge(’s’, ’1’, capacity=1)
G.add edge(’s’, ’2’, capacity=1)
G.add edge(’1’, ’2’, capacity=1)
G.add edge(’1’, ’3’, capacity=1)
G.add edge(’2’, ’3’, capacity=1)
G.add edge(’2’, ’4’, capacity=1)
G.add edge(’3’, ’4’, capacity=1)
G.add edge(’3’, ’t’, capacity=1)
G.add edge(’4’, ’t’, capacity=1)
最大流問題 解
flow value, flows = nx.maximum flow(G, ’s’, ’t’)
結果 表示
print(flow value)
NetworkX
仕方 例
sudo pip install networkx
Networkx
import networkx as nx
空
用意
G = nx.DiGraph()
点 加
G.add node(’s’)
G.add node(’1’)
G.add node(’2’)
G.add node(’3’)
G.add node(’4’)
G.add node(’t’)
概要
1
線形計画問題
2
Python
PuLP
3
最大流問題
4
Python
NetworkX
5
端点解
6
最大
問題
7
双対問題
8
和
9
演習
全体
import networkx as nx
G = nx.DiGraph()
G.add node(’s’)
G.add node(’1’)
G.add node(’2’)
G.add node(’3’)
G.add node(’4’)
G.add node(’t’)
G.add edge(’s’, ’1’, capacity=1)
G.add edge(’s’, ’2’, capacity=1)
G.add edge(’1’, ’2’, capacity=1)
G.add edge(’1’, ’3’, capacity=1)
G.add edge(’2’, ’3’, capacity=1)
G.add edge(’2’, ’4’, capacity=1)
G.add edge(’3’, ’4’, capacity=1)
G.add edge(’3’, ’t’, capacity=1)
G.add edge(’4’, ’t’, capacity=1)
flow value, flows = nx.maximum flow(G, ’s’, ’t’)
print(flow value)
概要
1
線形計画問題
2
Python
PuLP
3
最大流問題
4
Python
NetworkX
5
端点解
6
最大
問題
7
双対問題
8
和
9
演習
端点解
線形計画問題 実行可能解
x
端点解
⇐⇒
def
以下 満
x
異
実行可能解
y, z
存在
∃
ε
∈
R
s.t
0
< ε <
1 : (1
−
ε
)
y
+
εz
=
x
定理(証明略)
最適解 存在
端点最適解 常 存在
f
=
x
1+
x
2x
1x
2F
f
=
x
1+
x
2x
1x
2F
x
∗最大
問題
応用
二部
上 最大
問題
入力:二部
G
= (
A, B
;
E
)
目的:要素数 最大
線形計画問題
定式化
(
整数計画問題
)
Minimize
−
∑
e
∈
E
x
(
e
)
subject to
∑
e
∈
E
:
v
∈
e
x
(
e
)
≤
1
(
v
∈
A
∪
B
)
x
∈ {
0
,
1
}
E
注意:
x
∈ {
0
,
1
}
制約
問題 一般
難
最大
問題
応用
二部
G
= (
A, B
;
E
)
-
A
∩
B
=
∅
満
有限 点集合
A, B
-
以下 満
有限 辺集合
E
∀
e
∈
E
:
e
⊆
V,
|
e
∩
A
|
=
|
e
∩
B
|
= 1
M
⊆
E
⇐⇒
def
任意
v
∈
A
∪
B
対
|{
e
∈
M
|
v
∈
e
}| ≤
1
証明
任意 端点解 任意 要素 整数
示
整数
要素 含 端点解
x
存在
仮定
F
def
=
{
e
∈
E
|
0
< x
(
e
)
<
1
}
以下 場合 分
証明
-
F
中
“
”C
場合
=
⇒
2
部
C
長
偶数
-
F
中
“
”
場合
最大
問題
応用
x
(
e
)
∈ {
0
,
1
}
0
≤
x
(
e
)
≤
1
緩和
Minimize
−
∑
e
∈
E
x
(
e
)
subject to
∑
e
∈
E
:
v
∈
e
x
(
e
)
≤
1
(
v
∈
A
∪
B
)
x
(
e
)
≤
1
(
e
∈
E
)
x
∈
R
E
+
=
⇒
問題 変
線形計画問題
定理
緩和
最適解 目的関数値 変
証明:
F
中 閉路
場合
F
中 任意 極大
“
”
P
(
u
w
仮定
)
v
∈ {
u, w
}
1
F
辺 入
=
⇒
辺
δ
F
(v)
書
1
−
x(δ
F
(v))
<
1
α
def
= min
{
x(e)
|
e
∈
P
}
,
β
def
= min
{
1
−
x(e)
|
e
∈
P
}
ε
def
= min
{
α, β
}
x
+
, x
−
def
=
x
交互
M
足 ・引
=
⇒
x
+
, x
−
実行可能解
x
=
1
2
(x
+
+
x
−
)
=
⇒
x
端点解
矛盾
ε
−
ε
ε
−
ε
ε
−
ε
証明:
F
中 閉路
C
場合
α
def
= min
{
x(e)
|
e
∈
C
}
β
def
= min
{
1
−
x(e)
|
e
∈
C
}
ε
def
= min
{
α, β
}
x
+
, x
−
def
=
x
交互
M
足 ・引
=
⇒
x
+
, x
−
実行可能解
x
=
1
2
(x
+
+
x
−
)
=
⇒
x
端点解
矛盾
ε
ε
−
ε
−
ε
−
ε
−
ε
ε
ε
線形計画問題 書 換
行列
A
i
行
j
列
a
ij
b
b
def
= (
b
1
, b
2
, . . . , b
m
)
⊤
定義
c
c
def
= (
c
1
, c
2
, . . . , c
n
)
⊤
定義
記法 使
線形計画問題 以下
Minimize
c
1
x
1
+
c
2
x
2
+
· · ·
+
c
n
x
n
subject to
a
1
,
1
x
1
+
a
1
,
2
x
2
+
· · ·
+
a
1
,n
x
n
≥
b
1
a
2
,
1
x
1
+
a
2
,
2
x
2
+
· · ·
+
a
2
,n
x
n
≥
b
2
...
a
m,
1
x
1
+
a
m,
2
x
2
+
· · ·
+
a
m,n
x
n
≥
b
m
x
1
, x
2
, . . . , x
n
≥
0
概要
1
線形計画問題
2
Python
PuLP
3
最大流問題
4
Python
NetworkX
5
端点解
6
最大
問題
7
双対問題
8
和
9
演習
緩和
他 制約 緩和
(
y
j
≥
0
)
Minimize
c
1
x
1
+
· · ·
+
c
n
x
n
+
m
∑
j
=1
y
j
(
b
j
−
a
j,
1
x
1
− · · · −
a
j,n
x
n
)
subject to
x
1
, x
2
, . . . , x
n
≥
0
項 並 替
Minimize
b
1
y
1
+
· · ·
+
b
m
y
m
+
n
∑
i
=1
x
i
(
c
i
−
a
1
,i
y
1
− · · · −
a
m,i
y
m
)
subject to
x
1
, x
2
, . . . , x
n
≥
0
緩和
先
線形計画問題
緩和
制約式
a
1
,
1
x
1
+
· · ·
+
a
1
,n
x
n
≥
b
1
取 除
b
1
−
a
1
,
1
x
1
− · · · −
a
1
,n
x
n
≤
0
=
⇒
y
1
≥
0
掛
目的関数 足
Minimize
c
1
x
1
+
· · ·
+
c
n
x
n
+
y
1(
b
1
−
a
1
,
1
x
1
− · · · −
a
1
,n
x
n
)
subject to
a
2
,
1
x
1
+
a
2
,
2
x
2
+
· · ·
+
a
2
,n
x
n
≥
b
2
...
a
m,
1
x
1
+
a
m,
2
x
2
+
· · ·
+
a
m,n
x
n
≥
b
m
x
1
, x
2
, . . . , x
n
≥
0
双対問題
以下 問題 元 問題 「双対問題」
Maximize
b
1
y
1
+
b
2
y
2
+
· · ·
+
b
m
y
m
subject to
a
1
,
1
y
1
+
a
2
,
1
y
2
+
· · ·
+
a
m,
1
y
m
≤
c
1
a
1
,
2
y
1
+
a
2
,
2
y
2
+
· · ·
+
a
m,
2
y
m
≤
c
2
...
a
1
,n
y
1
+
a
2
,n
y
2
+
· · ·
+
a
m,n
y
m
≤
c
n
y
1
, y
2
, . . . , y
m
≥
0
行列 使
表現 以下
Maximize
b
⊤
y
subject to
A
⊤
y
≤
c
y
∈
R
m
+
双対問題
問題 元 問題 「緩和」
最適解 目的関数 値 下
=
⇒
元 問題 最適解 目的関数 値 下界
良 下界 欲
b
1
y
1
+
· · ·
+
b
m
y
m
最大化
y
1
, y
2
, . . . , y
m
x
i
≥
0
c
i
−
a
1
,i
y
1
− · · · −
a
m,i
y
m
≥
0
意味
⇐
=
目的関数 値 小
概要
1
線形計画問題
2
Python
PuLP
3
最大流問題
4
Python
NetworkX
5
端点解
6
最大
問題
7
双対問題
8
和
9
演習
双対定理
x
∈
R
n
+
def
=
元 問題 実行可能解
(x
∗
def
=
最適解
)
y
∈
R
m
+
def
=
双対問題 実行可能解
(y
∗
def
=
最適解
)
定理:弱双対定理
c
⊤
x
≥
b
⊤
y
証明
c
⊤
x
≥
(
y
⊤
A
)
x
=
y
⊤
(
Ax
)
≥
y
⊤
b
=
b
⊤
y
□
定理:強双対定理(証明 省略)
c
⊤
x
∗
=
b
⊤
y
∗
和
利得 定義:
(R
戦略
{
x
i
}
, C
戦略
{
y
i
}
)
- R
利得
:=
m
∑
i
=1
n
∑
j
=1
a
i,j
x
i
y
j
- C
損害
:=
m
∑
i
=1
n
∑
j
=1
a
i,j
x
i
y
j
目的:
- R
目的
:= max
{
xi
}
min
{
yj
}
m
∑
i
=1
n
∑
j
=1
a
i,j
x
i
y
j
- C
目的
:= min
{
yj
}
max
{
xi
}
m
∑
i
=1
n
∑
j
=1
a
i,j
x
i
y
j
和
入力:
-
行列
A
= (
a
i,j
)
i
=1
,...,m,j
=1
,...,n
-
行
R
列
C
-
a
i,j
= C
R
払 金額
考
:
- R
戦略
=
⇒
行集合
{
1
,
2
, . . . , m
}
上 確率分布
- C
戦略
=
⇒
列集合
{
1
,
2
, . . . , n
}
上 確率分布
von Neumann
最大最小定理
先
線形計画問題 双対問題 以下
Minimize
α
subject to
n
∑
j
=1
a
ij
y
j
≤
α
(i
∈ {
1,
2, . . . , m
}
)
n
∑
j
=1
y
j
= 1
y
j
≥
0 (j
∈ {
1,
2, . . . , n
}
)
定理 右辺 求
問題
強双対定理
右辺 左辺 一致
□
von Neumann
最大最小定理
定理
max
{
xi
}
min
{
yj
}
m
∑
i
=1
n
∑
j
=1
a
i,j
x
i
y
j
= min
{
yj
}
max
{
xi
}
m
∑
i
=1
n
∑
j
=1
a
i,j
x
i
y
j
左辺 問題 以下
書
Maximize
z
subject to
m
∑
i
=1
a
ij
x
i
≥
z
(
j
∈ {
1
,
2
, . . . , n
}
)
m
∑
i
=1
x
i
= 1
x
i
≥
0 (
i
∈ {
1
,
2
, . . . , m
}
)
課題
課題
1
講演 紹介
線形計画問題 例
解
課題
2
以下 問題
Maximize
z
subject to
∑
m
i
=1
a
ij
x
i
≥
z
(
j
∈ {
1
,
2
, . . . , n
}
)
∑
m
i
=1
x
i
= 1
x
i
≥
0 (
i
∈ {
1
,
2
, . . . , m
}
)
双対問題 導
概要
1
線形計画問題
2
Python
PuLP
3
最大流問題
4
Python
NetworkX
5
端点解
6
最大
問題
7
双対問題
8
和
9
演習
課題
2
解答
上界 求
min
β
z
自由
∑
n
j
=1
y
j
−
1 = 0
x
i
≥
0
意味
∑
n
j
=1
a
ij
y
j
−
β
≤
0
以上
Minimize
β
subject to
n
∑
j
=1
a
ij
y
j
≤
β
(i
∈ {
1,
2, . . . , m
}
)
n
∑
j
=1
y
j
= 1
y
j
≥
0 (j
∈ {
1,
2, . . . , n
}
)
課題
2
解答
各
j
= 1,
2, . . . , n
対
変数
y
j
≥
0
用意
変数
β
用意
問題 緩和
max
z
+
n
∑
j
=1
y
j
(
m
∑
i
=1
a
ij
x
i
−
z) +
β(1
−
m
∑
i
=1
x
i
)
整理
max
β
+
z(1
−
m
∑
j
=1
y
j
) +
m
∑
i
=1
x
i
(
n
∑
j
=1
a
ij
y
j
−
β)
形状最適化理論と製品設計への応用
ܗঢ়࠷దԽཧͱઃܭͷԠ༻ ͡Ίʹ
͡Ίʹ
■
ܗঢ়࠷దԽ
φ
α(
θ
)
D
Γ
DΓ
pp
Nb
(
θ
)
u
DΓ
D0Γ
p0Ω
0Ω(
φ
)
x
(
i
+
φ
)(
x
)
Γ(
x
)
(a)
ີมಈ
ϕ
(
θ
)
,
ઃܭม
θ
:
D
→
R
(b)
ྖҬมಈ
(
ઃܭม
)
ϕ
:
R
d→
R
dਤ
1.1:
d
∈ {
2
,
3
}
࣍ݩͷྖҬ
D,
Ω
0⊂
R
dͱઃܭม
ܗঢ়࠷దԽཧͱઃܭͷԠ༻
ܗঢ়࠷దԽཧͱઃܭͷԠ༻
൞্ ल
໊ݹେֶ ใֶݚڀՊ ෳࡶܥՊֶઐ߈
AIMaP
1νϡʔτϦΞϧʮ࠷దԽཧͷجૅͱԠ༻ʯ
ຊڮϥΠϑαΠΤϯεϏϧσΟϯά
, 2018
1
݄
19
1
ֶΞυόϯετΠϊϕʔγϣϯϓϥοτϑΥʔϜ
, Advanced Innovation powered by
Mathematics Platform
ܗঢ়࠷దԽཧͱઃܭͷԠ༻ ࠷దઃܭͷಛ
§
1
࠷దઃܭͷಛ
■
ஈ͖ͭ
1
࣍ݩઢܗੑମͷஅ໘ੵ࠷దԽ
[1, 1.1
અ
]
அ໘ੵ
a
= (
a
1, a
2)
T͕༩͑ΒΕͨͱ͖ɼ֎ྗ
p
= (
p
1, p
2)
TΛطͱͯ͠ɼ
มҐ
u
= (
u
1, u
2)
T
e
Yl
(
a
1+
a
2−
a
2−
a
2a
2) (
u
1u
2)
=
(
p
1p
2)
(1.1)
ΑΓٻΊΒΕΔɽ͜͜Ͱɼ
a
Λ
ઃܭม
ɼ
u
Λ
ঢ়ଶม
ͱΈͳ͢ɽ
p
1u
1u
2a
1l
a
2p
2l
x
Γ
1Γ
2
Γ
0ਤ
1.1:
2
ͭͷஅ໘ੵΛͭ
1
࣍ݩઢܗੑମ
ܗঢ়࠷దԽཧͱઃܭͷԠ༻ ͡Ίʹ
■
֓ཁ
•
ඇઢܗܭըͱͯ͠Έͨͱ͖ͷ
࠷దઃܭ
ͷಛ
(
§
1)
ͱղ๏
(
§
2)
•
࠷దઃܭͷ
࿈ଓମܗঢ়࠷దԽ
ͷ֦ு
(
§
3,
§
4,
§
5,
§
6)
•
ઃܭͷԠ༻ྫͷհ
(
§
7
∼ §
11)
•
FreeFEM++
Λ༻͍࣮ͨश
(
§
12)
ܗঢ়࠷దԽཧͱઃܭͷԠ༻ ࠷దઃܭͷಛ
ઃܭมͷೖΔઢܗۭؒ
Λ
X
=
R
2ͱ͓͖ɼ͞Βʹɼઃܭू߹Λ
D
=
{
a
∈
X
|
a
≥
a
0}
ͱ͓͘ɽͨͩ͠ɼ
a
0= (
a
01, a
02)
T>
0
R2ΛఆϕΫτϧͱ͢Δɽ·ͨɼ
ঢ়ଶม
ͷೖΔઢܗۭؒ
Λ
U
=
R
2ͱ͓͘ɽ
1.2 (
ฏۉίϯϓϥΠΞϯε࠷খԽ
)
X
=
R
2͓Αͼ
U
=
R
2ͱ͓͘ɽ͜ͷͱ͖ɼ
min
(a,u)∈D×U
{
f
0(
u
)
|
f
1(
a
)
≤
0
,
1.1
}
Λຬͨ͢
a
ΛٻΊΑɽ
࠷దઃܭͷಛ
࠷దઃܭɼ
ঢ়ଶܾఆ੍͕ࣜͱͯ͠ՃΘͬͨ
ෆ͖ࣜͭඇઢܗ࠷
దԽͷΫϥεͱΈͳ͢͜ͱ͕Ͱ͖Δɽ
ܗঢ়࠷దԽཧͱઃܭͷԠ༻ ࠷దઃܭͷಛ
1.1 (
ঢ়ଶܾఆ
)
ਤ
2.4
ͷ
1
࣍ݩઢܗੑମʹରͯ͠ɼ͞
l
, Young
e
Y,
p
∈
R
2͓Αͼ
a
∈
R
2͕༩͑ΒΕͨͱ͖ɼ
K
(
a
)
u
=
p
(1.2)
Λຬͨ͢
u
∈
R
2ΛٻΊΑɽͨͩ͠ɼࣜ
(1.2)
ࣜ
(1.1)
Λද͢͜ͱʹ͢Δɽ
1.1
ͷղ
u
ʹରͯ͠ɼ
తؔ
ͱ
੍ؔ
(
͋Θͤͯ
ධՁؔ
ͱΑͿ
)
Λ
f
0(
u
) =
(
p
1p
2)
(
u
1u
2)
=
p
·
u
,
f
1(
a
) =
l
(
a
1+
a
2)
−
c
1=
(
l
l
)
(
a
1a
2)
−
c
1ͱ͓͘ɽf
0ฏۉίϯϓϥΠΞϯεɼf
1ମੵ੍ؔͱΑΕΔɽ
ܗঢ়࠷దԽཧͱઃܭͷԠ༻ ࠷దઃܭͷղ๏
§
2
࠷దઃܭͷղ๏
■
ޯ๏ͱ
Newton
๏
[1, 3.3
અ
, 3.5
અ
]
࠷ॳʹ੍ͳ͠ͷΛߟ͑Δɽ
2.1 (
੍ͳ͠࠷దԽ
)
X
=
R
dɼf
:
X
→
R
ʹରͯ͠ɼ
min
x∈X
f
(
x
)
Λຬͨ͢
x
ΛٻΊΑɽ
ܗঢ়࠷దԽཧͱઃܭͷԠ༻ ࠷దઃܭͷಛ
ྫ
1.3 (
ฏۉίϯϓϥΠΞϯε࠷খԽͷྫ
)
1.2
ʹ͓͍ͯ
l
= 1
,
e
Y= 1
,
c
1= 1
,
p
= (1
,
1)
T,
a
0= (0
.
1
,
0
.
1)
Tͱ͓͍ͯɼ
a
ͷ࠷খΛٻΊΑɽ
0 0
1 15
a
1 01
a
2f
0(a
1,1–
a
1)
f
0(a
1,
a
2)
˜
˜
10
5
ਤ
1.2:
ઃܭมͷू߹ʹ͓͚ΔฏۉίϯϓϥΠΞϯε
(
f
0(
u
(
a
))
Λ
f
˜
0(
a
)
ͱ͔͘
)
ܗঢ়࠷దԽཧͱઃܭͷԠ༻ ࠷దઃܭͷղ๏
ࣜ
(2.1)
ɼ
q
(
y
g) = min
y∈X
{
q
(
y
) =
1
2
y
·
(
Ay
) +
g
·
y
+
f
(
x
k)
}
Λຬͨ͢
y
g∈
X
ΛٻΊΔ͜ͱͱಉͰ͋Δɽ
g
X
f
y,
�
y
�
X=1
X
��
g
�
X�x
kR
ਤ
2.1:
ޯ
g
ͷఆٛ
X
�g
X
f
yg
R
q
x
k¯
ਤ
2.2:
ޯ๏
ܗঢ়࠷దԽཧͱઃܭͷԠ༻ ࠷దઃܭͷղ๏
ධՁؔ
f
ͷࢼߦ
x
kपΓͷ
Taylor
ల։
f
(
x
k+
y
) =
f
(
x
k) +
g
·
y
+
o
(
∥
y
∥
X)
ʹ͓͍ͯɼ
ޯ
g
͕ܭࢉ͞Εͨͱ͖ɼޯ๏ɼ
y
g·
(
Ay
) =
−
g
·
y
∀
y
∈
X
⇔
y
g=
−
A
−1g
(2.1)
Λຬͨ͢Α͏ʹ୳ࡧϕΫτϧ
y
g∈
X
ΛٻΊΔํ๏Ͱ͋Δɽͨͩ͠ɼ
A
∈
R
d×dਖ਼ఆରশߦྻͱ͢Δɽ͢ͳΘͪɼ
A
=
A
T,
∃
α >
0 :
y
·
(
Ay
)
≥
α
∥
y
∥
2Rd∀
y
∈
X.
࣮ࡍɼ
f
(
x
k+
ϵ
y
g)
−
f
(
x
k) =
−
ϵ
y
g·
(
Ay
g) +
o
(
ϵ
)
≤ −
ϵα
∥
y
g∥
2X+
o
(
ϵ
)
.
ܗঢ়࠷దԽཧͱઃܭͷԠ༻ ࠷దઃܭͷղ๏
■
੍͖ࣜͭʹ͓͚Δ
f
ͷޯͱ
Hesse
ߦྻ
[1, 2.6
અ
]
࠷దԽཧ
•
ઃܭมΛ
x
∈
X
=
R
dͱ͢Δɽ
•
੍ࣜΛ
h
= (
h
1,
· · ·
, hn
)
T:
X
→
R
n(
n < d
)
ͱ͔͘ɽ
࠷దઃܭཧ
•
ઃܭมΛ
x
= (
ϕ
,
u
)
∈
X
=
R
d= Ξ
×
U
=
R
d−n×
R
n(
n < d
)
ͱ͢Δɽ
ϕ
∈
Ξ
Λ
ઃܭม
ɼ
u
∈
U
Λ
ঢ়ଶม
ͱΑͿɽ
•
੍ࣜΛ
h
= (
h
1,
· · ·
, hn
)
T:
X
→
R
n=
U
′ͱ͓͘ɽ
2.2 (
੍͖ࣜͭ࠷దԽ
)
X
=
R
dɼf
:
X
→
R
,
h
= (
h
1
,
· · ·
, h
n)
T:
X
→
R
n(
n < d
)
ʹରͯ͠ɼ࣍Λຬ
ͨ͢
x
= (
ϕ
,
u
)
ΛٻΊΑɽ
min
x∈X
{
f
(
x
)
|
h
(
x
) =
0
U′}
ܗঢ়࠷దԽཧͱઃܭͷԠ༻ ࠷దઃܭͷղ๏
ޯ
g
ͷࢼߦ
x
kपΓͷ
Taylor
ల։
g
(
x
k+
y
g) =
g
+
Hy
g+
o
(
∥
y
g∥
X)
Λຬͨ͢
ޯ
g
ͱ
Hesse
ߦྻ
H
͕ܭࢉ͞Εͨͱ͖ɼ
Newton
๏ɼ
g
(
x
k+
y
g) =
g
+
Hy
g=
0
X′ͱ͓͘͜ͱʹΑΓ୳ࡧϕΫτϧ
y
g∈
X
ΛٻΊΔํ๏Ͱ͋Δɽ͢ͳΘͪɼ
y
g·
(
Hy
) =
−
g
·
y
∀
y
∈
X .
ܗঢ়࠷దԽཧͱઃܭͷԠ༻ ࠷దઃܭͷղ๏
■
Lagrange
๏
(
ਵม๏
)
ʹΑΔޯͷٻΊํ
x
= (
ϕ
,
u
)
∈
X
= Ξ
×
U
ʹҙͯ͠ɼ
2.2
ʹର͢Δ
Lagrange
ؔΛ
L
(
ϕ
,
u
,
v
) =
f
(
ϕ
,
u
) +
L
S(
ϕ
,
u
,
v
) =
f
(
ϕ
,
u
) +
v
·
h
(
ϕ
,
u
)
ͱ͓͘ɽ
v
∈
U
Lagrange
Ͱ͋Δɽ
L
ͷશඍʹରͯ͠ɼ
L
′(
ϕ
,
u
,
v
) [
φ
,
u
ˆ
,
v
ˆ
]
=
f
ϕ(
ϕ
,
u
) [
φ
] +
L
Sϕ(
ϕ
,
u
,
v
) [
φ
]
+
f
u(
ϕ
,
u
) [ ˆ
u
] +
L
Su(
ϕ
,
u
,
v
) [ ˆ
u
] (= 0
⇐
f
u+
L
Su(
ϕ
,
u
,
v
) =
0
U′)
+
L
Sv(
ϕ
,
u
,
v
) [ˆ
v
]
(= 0
⇐
h
(
ϕ
,
u
) =
0
U′)
=
g
·
φ
= ˜
f
′(
ϕ
) [
φ
]
∀
(
φ
,
u
ˆ
,
v
ˆ
)
∈
Ξ
×
U
×
U
͕Γཱͭɽͨͩ͠ɼf
(
ϕ
,
u
(
ϕ
))
Λ
f
˜
(
ϕ
)
ͱ͔͍ͨɽ
ܗঢ়࠷దԽཧͱઃܭͷԠ༻ ࠷దઃܭͷղ๏
2.2
ʹର͢Δ
Lagrange
ؔ
Λ
L
(
x
,
λ
) =
f
(
x
) +
λ
·
h
(
x
)
ͱఆٛ͢Δɽ
λ
= (
λ
1,
· · ·
, λ
n)
T∈
R
n
Lagrange
ͱΑΕΔɽ
ఆཧ
2.3 (
ۃখ
1
࣍ͷඞཁ݅
[1,
ఆཧ
2.6.4])
f
∈
C
1(
X
;
R
)
ɼ
h
∈
C
1(
X
;
R
n)
͓Αͼ
x
= (
ϕ
,
u
)
∈
X
ʹ͓͍ͯ
h
uT(
x
)
∈
R
n×n͕ਖ਼ଇߦྻͱ͢Δɽ͜ͷͱ͖ɼ
x
͕
2.2
ͷۃখͳΒɼ
L
x(
x
,
λ
) =
0
X,
L
λ(
x
,
λ
) =
h
(
x
) =
0
U′Λຬͨ͢
λ
∈
R
n͕ଘࡏ͢Δɽ
ఆཧ
2.3
ͷ݅ɼ࣍ͷΑ͏ʹ͔͚Δɽ
L
′(
x
,
λ
)
[
y
,
λ
ˆ
]
=
L
x(
x
,
λ
) [
y
] +
L
λ(
x
,
λ
)
[
ˆ
λ
]
= 0
∀
(
y
,
λ
ˆ
)
∈
X
×
U.
ܗঢ়࠷దԽཧͱઃܭͷԠ༻ ࠷దઃܭͷղ๏
ఆཧ
2.4 (
ۃখ
2
࣍ͷඞཁ݅
[1,
ఆཧ
2.6.6])
2.2
ʹ͓͍ͯɼf
∈
C
2(
X
;
R
)
͓Αͼ
h
∈
C
2(
X
;
U
)
ͱ͢Δɽ
x
= (
ϕ
,
u
)
∈
S
ʹ͓͍ͯ
∂X
h
1(
x
)
,
. . .
,
∂X
hn
(
x
)
͕
1
࣍ಠཱͱ͢Δɽ͜ͷͱ
͖ɼ
x
͕ۃখͳΒɼ͕࣍Γཱͭɽ
L
xx(
x
,
λ
) [
y
,
y
]
≥
0
∀
y
∈
TS
(
x
)
ఆཧ
2.5 (
ۃখ
2
࣍ͷे݅
[2, Theorem 2.3])
2.2
ʹ͓͍ͯɼf
∈
C
2(
X
;
R
)
͓Αͼ
h
∈
C
2(
X
;
U
)
ͱ͢Δɽ
x
∈
X
ʹ͓͍
ͯ
∂X
h
1(
x
)
,
. . .
,
∂X
hn
(
x
)
͕
1
࣍ಠཱͱ͢Δɽ͜ͷͱ͖ɼ
x
͕ఆཧ
2.3
ͷ݅
Λຬͨ͠ɼ
L
xx(
x
,
λ
) [
y
,
y
]
>
0
∀
y
∈
TS
(
x
)
Λຬͨ͢
(
x
,
λ
)
͕ଘࡏ͢ΔͳΒɼ
x
2.2
ͷۃখͰ͋Δɽ
ܗঢ়࠷దԽཧͱઃܭͷԠ༻ ࠷దઃܭͷղ๏