ちょっとかしこく生きよう
by
なごみそ
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
ちょっとかしこく生きよう なごみそ@Kawasaki.rb 60th
Slide 2
Slide 2 text
自己紹介 ● 名前: なごみそ(@NagominHotMotto) ● 仕事: 夏と冬に有明周辺で戦うこと ● 副業: SEっぽいことをしています
Slide 3
Slide 3 text
使用できるロッカーも変更になるため ロッカーの再割当てが必要になった 社内の席替え
Slide 4
Slide 4 text
会社から出てきた割当案が あまりにも ク○ だった
Slide 5
Slide 5 text
何が ク○ だったか
Slide 6
Slide 6 text
何が○ソだったか ● 思考を完全停止させた配置 – 社員番号順に配置させただけ ● 自席とロッカーが 遠い ここ○ソ
Slide 7
Slide 7 text
頭にきたのでロッカーの割当を 数理最適化 するプログラムを作った
Slide 8
Slide 8 text
数理最適化してみた ロッカーの割当てを 整数計画問題 にした – 線形計画問題(Integer Programming; IP): ● 目的関数が線形関数で表現できて変数ベクトルの 要素が整数のみ かつ制約条件が線形関数と不等式で表現できる問題
Slide 9
Slide 9 text
どんなことをしたか ● 式を作る ● 座席とロッカーの座標情報を取得する ● ソルバーで解く
Slide 10
Slide 10 text
どんなことをしたか ● 式を作る ● 座席とロッカーの座標情報を取得する ● ソルバーで解く
Slide 11
Slide 11 text
式を作る ● もろもろ定義 – 座席: – ロッカー: – 定数: – 変数:
Slide 12
Slide 12 text
式を作る ● 目的関数 – 全員の座席からロッカーまでの距離総和 – これが最小になる x を探す
Slide 13
Slide 13 text
式を作る ● 制約条件 – ロッカーはひとり必ず1個割当てる – ロッカー1区画にはn人まで割当てられる
Slide 14
Slide 14 text
どんなことをしたか ● 式を作る ● 座席とロッカーの座標情報を取得する ● ソルバーで解く
Slide 15
Slide 15 text
座席とロッカーの 座標情報を取得する ● 座席とロッカーの地図はExcel製(ここもク○) ● Pandas + Xlrd でデータフレームとして読込み ● データフレームの0行0列要素を原点として 座席とロッカーの座標を取得 さくら いずみ うづき りん あこ みお ロッカーA ロッカーB さくら=(0,1) いずみ=(1,1) あここ=(0,2) ロッカーA=(0,6) ロッカーB=(1,6) S L
Slide 16
Slide 16 text
どんなことをしたか ● 式を作る ● 座席とロッカーの座標情報を取得する ● ソルバーで解く
Slide 17
Slide 17 text
ソルバーで解く ● PuLP ( https://pythonhosted.org/PuLP/) ● Python用の線形計問題最適化モジュール ● 作って式を違和感なくコード化できる(と思った)
Slide 18
Slide 18 text
直感的(?) x = { (l, s): pulp.LpVariable( name='{}:{}'.format(l, s), lowBound=0, upBound=1, cat=pulp.LpInteger ) for l, s in product(L, S) }
Slide 19
Slide 19 text
直感的(?) problem += pulp.lpSum( c[l, s] * x[l, s] for l, s in product(L, S) ), 'TotalDistance'
Slide 20
Slide 20 text
直感的(?) for l in L: problem += \ sum(x[l, s] for s in s) <= n, \ 'Constraint_leq_{}'.format(l)
Slide 21
Slide 21 text
最近はあんまりメンテされていないみたい
Slide 22
Slide 22 text
本当に席に近いロッカーを 手に入れられたのか?
Slide 23
Slide 23 text
こたえ 微妙でした
Slide 24
Slide 24 text
反省 ● 総和でしか評価していないのでバラツキがある – 遠いヒトと近いヒトがいる(私は遠かった……) ● 忖度できていない – エラいヒトも問答無用で遠い場所に配置
Slide 25
Slide 25 text
ちょっとかしこく生きよう ● 何気ない身近な問題を技術でカイゼンできた ● 思考停止は誰も幸せにならないよね – 歩く距離が伸びて疲れる...... – 人手で割当てるの面倒くさい...... ● 要改善点 – バラツキを考慮する – 忖度できるように条件を考える
Slide 26
Slide 26 text
おしまい