ちょっとかしこく生きよう
by
なごみそ
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
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
おしまい