tbf05-seat-optim.pdf

 tbf05-seat-optim.pdf

LaTeX Beamer のソース:
https://www.overleaf.com/read/bcpjxrrpdznh

D6bf88af4f3c68f688d433ad0c3c1345?s=128

Shuhei Fujiwara

November 19, 2018
Tweet

Transcript

  1. 2.

    自己紹介 藤原秀平 (FUJIWARA Shuhei) Twitter: @shuhei_fujiwara ▶ 技術書典運営スタッフ ▶ 株式会社メルペイ

    ▶ TensorFlow User Group Tokyo Organizer ▶ Google Developer Expert (Machine Learning) 2
  2. 5.

    解決したい課題 ▶ 約 500 サークルがそれぞれどこの席に座るかを決めたい こ40 こ01 け78 け41 け38

    け39 け40 け01 く20 く01 き40 き01 か80 か41 か40 か01 お40 お01 え40 え01 う78 う41 う40 う03 う01 い30 い01 あ01 あ20 催事スペース 荷物作業スペース スポンサーブース 運営ブース 出⼝ ⼊⼝ ▶ 人手でやるのは相当厳しい規模 ▶ 技術書典 4 は約 250 サークルでとりあえず雑に並べるだけで丸 2 日 ▶ そこからさらに調整が入る 5
  3. 6.

    得られた成果 ▶ 叩き台の作成が自動化されて 5 分で終わるようになった! ▶ 丸 2 日掛かっていた作業が 5

    分ですよ! ▶ サークル数が倍になったのにですよ! ▶ 浮いた数日分を微調整に全投入して配置のクオリティが上がった ▶ あんま楽になってなくない...? ▶ 決して叩き台の質が低かったわけじゃないんですよ...! 6
  4. 8.

    サークル間類似度を定義する まずは手作業でサークルにこんな感じの tag を付ける tag 1 tag 2 tag 3

    · · · circle 1 数学 機械学習 R · · · circle 2 機械学習 数学 . . . . . . . . . . . . circle m Android IoT Kotlin · · · ▶ 元々手作業での配置のために似たようなことをしていたのを流用 ▶ Tag 集合同士の類似度なら上手いこと定義できそう ▶ ただし tag はかなり雑につけられていることを想定したい 8
  5. 9.

    類似度の定義 Tag によるスコアの定義 r(t) := 1 log[Tag t を持つサークルの総数] サークル間類似度の定義

    Ci , Cj をサークル i, j を表す tag 集合として s(Ci , Cj) := max t∈Ci∩Cj r(t) ▶ 珍しい tag が優遇されるように傾斜をつけた ▶ Tag が多いサークルが有利にならないよう最大だけを見る 9
  6. 10.

    各席同士の近さは定義するべきか? 真面目にやると泥沼っぽい予感がするのでやりたくない... ▶ 隣と背中合わせはどっちがどれくらい近いの? ▶ 通路を挟んで向かい合わせは近いの? ▶ 会場や机の並べ方を変更したら全部吹っ飛ぶし... こ40 こ01

    け78 け41 け38 け39 け40 け01 く20 く01 き40 き01 か80 か41 か40 か01 お40 お01 え40 え01 う78 う41 う40 う03 う01 い30 い01 あ01 あ20 催事スペース 荷物作業スペース スポンサーブース 運営ブース 出⼝ ⼊⼝ 10
  7. 11.

    サークルを部分集合に分割する方針で舵を切る circle block circle A あ circle B う circle

    C う circle D あ . . . . . . size: 3 size: 3 size: 3 size: 3 A B C D E F G H I J K L A D I B C E F J K G H L サークル A~L を部分集合に分割 size: 3 size: 3 size: 3 size: 3 ▶ こんな感じの表が自動でできれば十分なのでは? ▶ 同一ブロック内の細かい配置は人間が調整すれば良いんじゃない? 11
  8. 12.

    サークル分割問題 Table 1: xij block 1 block 2 block 3

    · · · block N circle 1 1 0 0 · · · 0 circle 2 0 0 1 · · · 0 circle 3 0 0 1 · · · 0 . . . . . . . . . . . . ... . . . circle M 0 1 0 · · · 0 min x m ∑ i m ∑ j n ∑ k sij xik xjk s.t. xik ∈ {0, 1} n ∑ k xik = 1 m ∑ i xik ≤ ck ▶ 同一ブロック内のサークル間類似度の総和を最大化 ▶ ブロック k には任意のサイズ ck を与えることができる 12
  9. 15.

    サークル分割問題を解く 最終的に簡単なヒューリスティクスに着地 1. ランダムに実行可能解を生成 2. ランダムに 2 ブロックを選択 3. 各ブロックからランダムに

    1 サークルずつ選択 4. 目的関数値が改善するならばサークルの座席交換を実行 5. 2–4 を適当な回数繰り返す 15
  10. 17.

    ブロック間の調整 A D I B C E G H L

    F J K あ01--あ03 い01--い03 う01--う03 え01--え03 ブロックの位置を人手で入れ替える A D I B C E G H L F J K あ01--あ03 い01--い03 う01--う03 え01--え03 ▶ 同じサイズのブロック同士は位置を交換することができる ▶ ブロックのサイズをできる限り揃えて人間による調整の余地を残す ▶ 元々の「あ」〜「こ」のブロックをもう少し細かく分割 17
  11. 19.

    ブロック内のサークル順列問題 (突貫工事だ!) ▶ 同一ブロック内のサークルは一直線上に 並ぶと仮定 ▶ 隣同士の類似度の総和を最大化を ブロックごとに解く ▶ アルゴリズムはサークル分割問題と同じで

    座席交換の繰り返し ▶ 時間の都合上こうなったけどもっと良い方法が ありそう 1 3 2 4 s12 s23 s34 s12 s13 s24 要するに完全グラフ上で最長ハミルトン路を求める問題 19