tag:crieit.net,2005:https://crieit.net/tags/%E6%9C%BA%E3%81%AE%E9%85%8D%E7%BD%AE/feed 「机の配置」の記事 - Crieit Crieitでタグ「机の配置」に投稿された最近の記事 2019-07-23T23:07:06+09:00 https://crieit.net/tags/%E6%9C%BA%E3%81%AE%E9%85%8D%E7%BD%AE/feed tag:crieit.net,2005:PublicArticle/15271 2019-07-22T19:41:12+09:00 2019-07-23T23:07:06+09:00 https://crieit.net/posts/d94408d56e06a3e3ef947bf90cf63ceb 評価関数を検定しようぜ☆(^~^)? <p><a href="https://crieit.net/posts/616ac84b4d6203eaa8a012ba5f2d0eb9">机を配置しようぜ☆(^~^)?<その2></a> からの続き。</p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 わたしたちが 何をやっているかは 説明するのが めんどくさいので 省略する☆」</p> <p>Git hub: <a target="_blank" rel="nofollow noopener" href="https://github.com/muzudho/event-placement-ai">event-placement-ai</a></p> <p><a href="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif?mw=700" alt="KIFUWARABE_80x100x8_01_Futu.gif" /></a><br /> 「 わらう☆」</p> <p>test_evaluation.py</p> <pre><code>from evaluation import evaluate high_pos = None low_pos = None high_value = evaluate(high_pos) low_value = evaluate(low_pos) if (low_value < high_value): print("ok.") else: print("BAD.") print("Info : Finished.") </code></pre> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 理屈としては これだけだぜ☆」</p> <p><a href="https://crieit.now.sh/upload_images/058791c2dd4c1604ce1bd9ec26d490ae5d2ad86d3991b.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/058791c2dd4c1604ce1bd9ec26d490ae5d2ad86d3991b.gif?mw=700" alt="OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif" /></a><br /> 「 テスト・データを作るのが大変なのよね」</p> <pre><code>floor_map_csv_file = "./event-placement-ai/auto-generated/floor-map.csv" participant_csv_file = "./event-placement-ai/input-data/participant.csv" mappings_csv_file = "./event-placement-ai/auto-generated/mappings.csv" pos_df = new_position(floor_map_csv_file, participant_csv_file, mappings_csv_file) </code></pre> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 position を作るには3つのファイルを指定するんだが、 <code>floor-map.csv</code> を作るには2つのファイルが要る☆」</p> <p><a href="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif?mw=700" alt="KIFUWARABE_80x100x8_01_Futu.gif" /></a><br /> 「 もっと何とか楽できないのかだぜ☆?」</p> <p><a href="https://crieit.now.sh/upload_images/058791c2dd4c1604ce1bd9ec26d490ae5d2ad86d3991b.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/058791c2dd4c1604ce1bd9ec26d490ae5d2ad86d3991b.gif?mw=700" alt="OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif" /></a><br /> 「 ファイル名を指定するんじゃなくて、 pandas の DataFrame を引数に渡せないの?」</p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 見直してみるぜ☆」</p> <pre><code>import pandas as pd from evaluation import evaluate from my_lib.position import new_position from my_lib.build_floor_map import convert_floor_map # Location. block1_file = "./event-placement-ai/test/block-1.txt" table1_file = "./event-placement-ai/test/table-1.txt" floor1_file = "./event-placement-ai/test/floor-1.csv" participant1_file = "./event-placement-ai/test/participant-1.csv" mappings1_file = "./event-placement-ai/test/mappings-1.csv" block2_file = "./event-placement-ai/test/block-2.txt" table2_file = "./event-placement-ai/test/table-2.txt" floor2_file = "./event-placement-ai/test/floor-2.csv" participant2_file = "./event-placement-ai/test/participant-2.csv" mappings2_file = "./event-placement-ai/test/mappings-2.csv" # Read a floor. floor1_df = convert_floor_map(block1_file, table1_file) floor1_df.to_csv(floor1_file, index=False) floor2_df = convert_floor_map(block2_file, table2_file) floor2_df.to_csv(floor2_file, index=False) participant1_df = pd.read_csv(participant1_file) participant2_df = pd.read_csv(participant2_file) mappings1_df = pd.read_csv(mappings1_file, sep=',', engine='python') mappings2_df = pd.read_csv(mappings2_file, sep=',', engine='python') low_pos = new_position(floor1_df, participant1_df, mappings1_df) high_pos = new_position(floor2_df, participant2_df, mappings2_df) low_value = evaluate(low_pos) high_value = evaluate(high_pos) if (low_value < high_value): print("ok.") else: print("BAD.") print("Info : Finished.") </code></pre> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 外側は こんな感じになるかだぜ☆ 分けわからんな……☆」</p> <p><a href="https://crieit.now.sh/upload_images/058791c2dd4c1604ce1bd9ec26d490ae5d2ad86d3991b.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/058791c2dd4c1604ce1bd9ec26d490ae5d2ad86d3991b.gif?mw=700" alt="OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif" /></a><br /> 「 局面の作成を、1つの関数にまとめてしまいなさい」</p> <pre><code>import pandas as pd from evaluation import evaluate from my_lib.position import new_position from my_lib.build_floor_map import convert_floor_map def make_position(test_number): # Location. block_file = "./event-placement-ai/test/block-{}.txt".format(test_number) table_file = "./event-placement-ai/test/table-{}.txt".format(test_number) # floor_file = "./event-placement-ai/test/floor-{}.csv".format(test_number) participant_file = "./event-placement-ai/test/participant-{}.csv".format( test_number) mappings_file = "./event-placement-ai/test/mappings-{}.csv".format( test_number) # Read a floor. floor_df = convert_floor_map(block_file, table_file) # floor_df.to_csv(floor_file, index=False) participant_df = pd.read_csv(participant_file) mappings_df = pd.read_csv(mappings_file, sep=',', engine='python') return new_position(floor_df, participant_df, mappings_df) low_value = evaluate(make_position(1)) high_value = evaluate(make_position(2)) if (low_value < high_value): print("ok.") else: print("BAD.") print("Info : Finished.") </code></pre> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 これで テストケースを大量生産できるだろうか……☆?」</p> <p><a href="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif?mw=700" alt="KIFUWARABE_80x100x8_01_Futu.gif" /></a><br /> 「 テスト番号と バリエーション番号の2つを付けた方が あとで カバレッジ・テストをしたいときに便利じゃないか☆?」</p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 じゃあ付けとくか……☆」</p> <p>block-1-1.txt</p> <pre><code>AA..BB AA..BB </code></pre> <p>block-1-2.txt</p> <pre><code>AA..BB AA..BB </code></pre> <p>table-1-1.txt</p> <pre><code> 2, 1, 0, 0, 6, 5 3, 4, 0, 0, 7, 8 </code></pre> <p>table-1-2.txt</p> <pre><code> 2, 1, 0, 0, 6, 5 3, 4, 0, 0, 7, 8 </code></pre> <p>participant-1-1.csv</p> <pre><code>ID,GENRE_CODE 1,Red 2,Red 3,Blue 4,Blue 5,Green 6,Blue 7,Red 8,Blue </code></pre> <p>participant-1-2.csv</p> <pre><code>ID,GENRE_CODE 1,Red 2,Red 3,Blue 4,Blue 5,Green 6,Blue 7,Red 8,Blue </code></pre> <p>mappings-1-1.csv</p> <pre><code>TABLE,PARTICIPANT 1,1 2,2 3,3 4,4 5,5 6,6 7,7 8,8 </code></pre> <p>mappings-1-2.csv</p> <pre><code>TABLE,PARTICIPANT 1,1 2,2 3,5 4,6 5,3 6,4 7,7 8,8 </code></pre> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 同じファイルを何個も作ることになるのは なぜなのか……☆?」</p> <p><a href="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif?mw=700" alt="KIFUWARABE_80x100x8_01_Futu.gif" /></a><br /> 「 知らん☆」</p> <p><a href="https://crieit.now.sh/upload_images/058791c2dd4c1604ce1bd9ec26d490ae5d2ad86d3991b.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/058791c2dd4c1604ce1bd9ec26d490ae5d2ad86d3991b.gif?mw=700" alt="OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif" /></a><br /> 「 バリエーション番号を付けるのは マッピング だけでいいのよ」</p> <pre><code>ok. Info : Finished. </code></pre> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 なにかが OK のようだが、どんなテストだったか分からない……☆」</p> <p><a href="https://crieit.now.sh/upload_images/058791c2dd4c1604ce1bd9ec26d490ae5d2ad86d3991b.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/058791c2dd4c1604ce1bd9ec26d490ae5d2ad86d3991b.gif?mw=700" alt="OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif" /></a><br /> 「 HTML と CSS ファイルの出力も必要ねぇ」</p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 製品版と テスト版で わけるの めんどくさいから、<br /> HTMLと CSSのファイル名には テスト番号と バリエーション番号を必ずつけることにするかだぜ☆<br /> 製品版は 0 でも入れておけばいいだろ☆」</p> <p><a href="https://crieit.now.sh/upload_images/8537ef433425f3b88428e46feaaa73175d370b4abe707.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/8537ef433425f3b88428e46feaaa73175d370b4abe707.png?mw=700" alt="20190723blog50value8.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/6fab89a53f5059aace560f8f910699095d370b5485711.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/6fab89a53f5059aace560f8f910699095d370b5485711.png?mw=700" alt="20190723blog50value13.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 どんなもんだぜ、評価値☆」</p> <p><a href="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif?mw=700" alt="KIFUWARABE_80x100x8_01_Futu.gif" /></a><br /> 「 青が Bブロックに固まっている気がするな☆」</p> <p><a href="https://crieit.now.sh/upload_images/058791c2dd4c1604ce1bd9ec26d490ae5d2ad86d3991b.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/058791c2dd4c1604ce1bd9ec26d490ae5d2ad86d3991b.gif?mw=700" alt="OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif" /></a><br /> 「 ブロックの中での くっつき具合は見てないの?」</p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 見てないぜ☆」</p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 1通りだけでなく もっとテストした方がいいんだが、誰かがやってくれるだろ☆<br /> さっさと先に進もうぜ☆」</p> <p><a href="https://crieit.net/posts/616ac84b4d6203eaa8a012ba5f2d0eb9">机を配置しようぜ☆(^~^)?<その2></a> へ戻る。</p> むずでょ tag:crieit.net,2005:PublicArticle/15266 2019-07-21T19:32:58+09:00 2019-07-31T23:36:07+09:00 https://crieit.net/posts/616ac84b4d6203eaa8a012ba5f2d0eb9 机を配置しようぜ☆(^~^)?<その2> <p><前回の続き></p> <h1 id="出力"><a href="#%E5%87%BA%E5%8A%9B">出力</a></h1> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 ソースは Git hub にある☆<br /> まず 何が出力されるかを説明しよう☆」</p> <p>Git hub: <a target="_blank" rel="nofollow noopener" href="https://github.com/muzudho/event-placement-ai">event-placement-ai</a></p> <p><a href="https://crieit.now.sh/upload_images/409fda35ce2901ab5c3e5b5f2c2a3cd65d343cd970de9.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/409fda35ce2901ab5c3e5b5f2c2a3cd65d343cd970de9.png?mw=700" alt="20190721blog48a1.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 机の配置だな☆ 数字は参加者番号☆」</p> <p><a href="https://crieit.now.sh/upload_images/f5630c22f469b4f18aab8c910ad37e845d343cfb070d8.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/f5630c22f469b4f18aab8c910ad37e845d343cfb070d8.png?mw=700" alt="20190721blog48a2.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 CSV形式で ここまでは作ってくれる☆<br /> あとは 手打ちで 何とかしろだぜ☆」</p> <p>best-position.csv</p> <pre><code>X,Y,BLOCK,TABLE,PARTICIPANT,GENRE_CODE 0,0,C,27,35,Gray 1,0,C,26,22,Blue 2,0,C,25,41,Red 3,0,C,24,18,Yellow 4,0,C,23,8,Blue 7,0,B,22,20,Yellow 8,0,B,21,23,Black 9,0,B,20,54,Orange 10,0,B,19,21,Red 13,0,A,18,1,Red 14,0,A,17,27,Blue 15,0,A,16,53,Green 16,0,A,15,31,Yellow 17,0,A,14,34,Pink 18,0,A,13,52,Red 19,0,A,12,49,Gray 0,1,C,28,30,Blue 19,1,A,11,4,Blue 0,2,C,29,7,Red 2,2,F,57,57,Green 3,2,F,56,48,White 4,2,F,55,24,Black 7,2,E,50,25,White 8,2,E,49,47,Brown 9,2,E,48,56,Blue 10,2,E,47,60,Blue 13,2,D,41,58,Yellow 14,2,D,40,5,Green 15,2,D,39,19,SkyBlue 16,2,D,38,10,Green 17,2,D,37,40,Blue 19,2,A,10,38,Orange 0,3,C,30,33,Blue 2,3,F,58,15,Blue 3,3,F,59,14,Green 4,3,F,60,32,Orange 7,3,E,51,11,Purple 8,3,E,52,39,White 9,3,E,53,36,Green 10,3,E,54,12,Red 13,3,D,42,28,Pink 14,3,D,43,2,Red 15,3,D,44,45,YellowGreen 16,3,D,45,3,Blue 17,3,D,46,6,Blue 19,3,A,9,50,Blue 0,4,C,31,51,Yellow 19,4,A,8,44,Green 0,5,C,32,46,Black 1,5,C,33,26,Yellow 2,5,C,34,17,Blue 3,5,C,35,16,Yellow 4,5,C,36,59,White 13,5,A,1,9,Green 14,5,A,2,13,Violet 15,5,A,3,42,Green 16,5,A,4,29,Green 17,5,A,5,43,Yellow 18,5,A,6,55,Violet 19,5,A,7,37,Red </code></pre> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 この出力データを使って、さらに思考の材料にしてもいいわけだしな☆」</p> <h1 id="入力"><a href="#%E5%85%A5%E5%8A%9B">入力</a></h1> <pre><code>CCCCC..BBBB..AAAAAAA C..................A C.FFF..EEEE..DDDDD.A C.FFF..EEEE..DDDDD.A C..................A CCCCC........AAAAAAA </code></pre> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 ブロックは Rogue形式で示せだぜ☆ 半角1文字でなんとかしろ☆」</p> <pre><code>27,26,25,24,23, 0, 0,22,21,20,19, 0, 0,18,17,16,15,14,13,12 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,11 29, 0,57,56,55, 0, 0,50,49,48,47, 0, 0,41,40,39,38,37, 0,10 30, 0,58,59,60, 0, 0,51,52,53,54, 0, 0,42,43,44,45,46, 0, 9 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8 32,33,34,35,36, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7 </code></pre> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 テーブル番号は CSV形式で示せだぜ☆」</p> <p><a href="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif?mw=700" alt="KIFUWARABE_80x100x8_01_Futu.gif" /></a><br /> 「 なんだぜ、この二重管理……☆」</p> <pre><code>ID,GENRE_CODE 1,Red 2,Red 3,Blue 4,Blue 5,Green 6,Blue 7,Red 8,Blue 9,Green 10,Green 11,Purple 12,Red 13,Violet 14,Green 15,Blue 16,Yellow 17,Blue 18,Yellow 19,SkyBlue 20,Yellow 21,Red 22,Blue 23,Black 24,Black 25,White 26,Yellow 27,Blue 28,Pink 29,Green 30,Blue 31,Yellow 32,Orange 33,Blue 34,Pink 35,Gray 36,Green 37,Red 38,Orange 39,White 40,Blue 41,Red 42,Green 43,Yellow 44,Green 45,YellowGreen 46,Black 47,Brown 48,White 49,Gray 50,Blue 51,Yellow 52,Red 53,Green 54,Orange 55,Violet 56,Blue 57,Green 58,Yellow 59,White 60,Blue </code></pre> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 参加者は番号に ジャンルコードを対応付けろだぜ☆<br /> ジャンルコードは HTML/CSS で使われる色の名前☆」</p> <p><a href="https://crieit.now.sh/upload_images/058791c2dd4c1604ce1bd9ec26d490ae5d2ad86d3991b.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/058791c2dd4c1604ce1bd9ec26d490ae5d2ad86d3991b.gif?mw=700" alt="OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif" /></a><br /> 「 ジャンルコードじゃなくて、色じゃない」</p> <h1 id="思考部"><a href="#%E6%80%9D%E8%80%83%E9%83%A8">思考部</a></h1> <pre><code># Shuffule random.shuffle(par_id_list) random.shuffle(flo_id_list) </code></pre> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 思考部は今は シャッフルしてるだけだぜ☆」</p> <p><a href="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif?mw=700" alt="KIFUWARABE_80x100x8_01_Futu.gif" /></a><br /> 「 要らね☆」</p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 参加者番号と、テーブル番号を 対応付けながら 先頭から順に並べろだぜ☆」</p> <p><a href="https://crieit.now.sh/upload_images/058791c2dd4c1604ce1bd9ec26d490ae5d2ad86d3991b.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/058791c2dd4c1604ce1bd9ec26d490ae5d2ad86d3991b.gif?mw=700" alt="OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif" /></a><br /> 「 ブロックに 同じジャンルコードで まとめてくれるところまで やってくれてもいいんじゃない?」</p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 これは数学で言うと 何問題☆?」</p> <p><a href="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif?mw=700" alt="KIFUWARABE_80x100x8_01_Futu.gif" /></a><br /> 「 椅子問題☆」</p> <p><a href="https://crieit.now.sh/upload_images/058791c2dd4c1604ce1bd9ec26d490ae5d2ad86d3991b.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/058791c2dd4c1604ce1bd9ec26d490ae5d2ad86d3991b.gif?mw=700" alt="OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif" /></a><br /> 「 ブロックからはみ出た人を0に近づける 最小誤差」</p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 うーむ☆」</p> <pre><code>import random from my_lib.html_generator.css_builder import new_csv from my_lib.html_generator.html_builder import new_html from my_lib.entry_list import read_entry_lists from my_lib.mapper import write_mappings from my_lib.position import new_position from my_lib.build_floor_map import convert_map from evaluation import evaluate # Location. best_position_file = "./event-placement-ai/output-data/best-position.csv" # Read a cloor map. convert_map() par_id_list, flo_id_list = read_entry_lists() print("Info : Participants count: {}".format(len(par_id_list))) print("Info : Table count: {}".format(len(flo_id_list))) max_score = -1 best_pos_df = None for i in range(0, 10): # Shuffule random.shuffle(par_id_list) random.shuffle(flo_id_list) write_mappings(par_id_list, flo_id_list) pos_df = new_position() # Evaluation score = evaluate(pos_df) if max_score < score: max_score = score best_pos_df = pos_df new_html(best_pos_df) new_csv(best_pos_df) best_pos_df.to_csv(best_position_file, index=False) print("Info : Finished.") </code></pre> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 とりあえず ループで10回 回して 一番評価値の多い配置を返すなら<br /> 外側の形は こうだな☆」</p> <p>evaluation.py</p> <pre><code>def evaluate(pos_df): return 0 </code></pre> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 評価値を返す関数を実装すればいいわけだが……☆」</p> <pre><code>def evaluate(pos_df): # 評価値 value = 0 # Block は A~F とする。 # GenreCode は色々。 block_dict = {} for _index, row in pos_df.iterrows(): # x = row["X"] # y = row["Y"] block = row["BLOCK"] # table_id = row["TABLE"] # participant_id = row["PARTICIPANT"] genre_code = row["GENRE_CODE"] if not(block in block_dict): block_dict[block] = {} if not(genre_code in block_dict[block]): block_dict[block][genre_code] = 0 block_dict[block][genre_code] += 1 # 集計 for _block_name, genre_code_dict in block_dict.items(): for _genre_code_name, count in genre_code_dict.items(): value += count ** 2 break return value </code></pre> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 例えば こうとか☆」</p> <p><a href="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif?mw=700" alt="KIFUWARABE_80x100x8_01_Futu.gif" /></a><br /> 「 ラッキーパンチ待ち評価関数か☆」</p> <p><a href="https://crieit.now.sh/upload_images/d385212a8e689a0350a96bd9d8f039f15d3473c2c7529.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d385212a8e689a0350a96bd9d8f039f15d3473c2c7529.png?mw=700" alt="20190721blog49loop10.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 ループで 10回 トライすると こう☆<br /> 評価値は 99 ぐらいかだぜ☆ Cブロックに少し 青 が固まっているな☆」</p> <p><a href="https://crieit.now.sh/upload_images/6b12d8674c31afd95303c0ea7ae61aa15d34748b52dc0.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/6b12d8674c31afd95303c0ea7ae61aa15d34748b52dc0.png?mw=700" alt="20190721blog49loop1000.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 1000回 トライ……しても 何にもならないな☆」</p> <p><a href="https://crieit.now.sh/upload_images/424847006f423de35b456e3db8497b545d34768868998.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/424847006f423de35b456e3db8497b545d34768868998.png?mw=700" alt="20190721blog49loop1000value119.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 もう1回 1000回 トライで 評価値119☆ 黄色と青が 固まっているような気もするが……☆」</p> <p><a href="https://crieit.now.sh/upload_images/058791c2dd4c1604ce1bd9ec26d490ae5d2ad86d3991b.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/058791c2dd4c1604ce1bd9ec26d490ae5d2ad86d3991b.gif?mw=700" alt="OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif" /></a><br /> 「 ラッキーパンチ待ちの 電気代がかかるやつじゃない!」</p> <p><a href="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif?mw=700" alt="KIFUWARABE_80x100x8_01_Futu.gif" /></a><br /> 「 シャッフルするのではなく、1つずつ 入れ替えて 少しずつ 良くしていくのが<br /> いいんじゃないか☆?」</p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 作り込むには 週末の休みが終わってしまった……☆」</p> <p><a href="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif?mw=700" alt="KIFUWARABE_80x100x8_01_Futu.gif" /></a><br /> 「 そもそも その評価関数は わたしたちの目的に沿ってるのかだぜ☆?」</p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 検定しようぜ☆?」</p> <h1 id="評価関数を検定しようぜ☆(^~^)?"><a href="#%E8%A9%95%E4%BE%A1%E9%96%A2%E6%95%B0%E3%82%92%E6%A4%9C%E5%AE%9A%E3%81%97%E3%82%88%E3%81%86%E3%81%9C%E2%98%86%EF%BC%88%EF%BC%BE%EF%BD%9E%EF%BC%BE%EF%BC%89%EF%BC%9F">評価関数を検定しようぜ☆(^~^)?</a></h1> <p><a href="https://crieit.net/posts/d94408d56e06a3e3ef947bf90cf63ceb">評価関数を検定しようぜ☆(^~^)?</a></p> <p><a href="https://crieit.now.sh/upload_images/8537ef433425f3b88428e46feaaa73175d371867a74c9.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/8537ef433425f3b88428e46feaaa73175d371867a74c9.png?mw=700" alt="20190723blog50value8.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/6fab89a53f5059aace560f8f910699095d371872e4d3b.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/6fab89a53f5059aace560f8f910699095d371872e4d3b.png?mw=700" alt="20190723blog50value13.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 1回しかテストしてないが、次に進もうぜ☆」</p> <h1 id="探索しようぜ☆(^~^)?"><a href="#%E6%8E%A2%E7%B4%A2%E3%81%97%E3%82%88%E3%81%86%E3%81%9C%E2%98%86%EF%BC%88%EF%BC%BE%EF%BD%9E%EF%BC%BE%EF%BC%89%EF%BC%9F">探索しようぜ☆(^~^)?</a></h1> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 シャッフルして ラッキーパンチを待っていては くじ運頼りになってしまう☆<br /> わたしたちは もう少しマシな探し方を知っているだろう☆」</p> <pre><code>import random import pandas as pd from my_lib.html_generator.css_builder import new_csv from my_lib.html_generator.html_builder import new_html from my_lib.entry_list import read_entry_lists from my_lib.mapper import new_mappings from my_lib.position import new_position from my_lib.build_floor_map import convert_floor_map from evaluation import evaluate # Location. block_file = "./event-placement-ai/input-data/block.txt" table_file = "./event-placement-ai/input-data/table.txt" best_position_file = "./event-placement-ai/output-data/best-position.csv" position_file = "./event-placement-ai/auto-generated/position.csv" floor_file = "./event-placement-ai/auto-generated/floor.csv" participant_file = "./event-placement-ai/input-data/participant.csv" mappings_file = "./event-placement-ai/auto-generated/mappings.csv" # Read a floor. floor_df = convert_floor_map(block_file, table_file) floor_df.to_csv(floor_file, index=False) par_id_list, flo_id_list = read_entry_lists() # print(&quot;Info : Participants count: {}&quot;.format(len(par_id_list))) # print(&quot;Info : Table count: {}&quot;.format(len(flo_id_list))) # Shuffule at first. random.shuffle(par_id_list) flo_id_list.sort() # random.shuffle(flo_id_list) max_value = -1 for i in range(0, 1000): # Swap. size = len(par_id_list) index1 = random.randint(0, size-1) index2 = random.randint(0, size-1) # print("size={}, index1={}, index2={}".format(size, index1, index2)) temp = par_id_list[index1] par_id_list[index1] = par_id_list[index2] par_id_list[index2] = temp mappings_df = new_mappings(par_id_list, flo_id_list) mappings_df.to_csv(mappings_file, index=False) # floor_df = pd.read_csv(floor_file, # sep=',', engine='python') participant_df = pd.read_csv(participant_file) # mappings_df = pd.read_csv(mappings_file, # sep=',', engine='python') pos_df = new_position(floor_df, participant_df, mappings_df) """ output ------ X,Y,BLOCK,PARTICIPANT,TABLE,GENRE_CODE 0,0,C,1,27,Red 1,0,C,2,26,Red 2,0,C,3,25,Blue 3,0,C,4,24,Blue 4,0,C,5,23,Green """ pos_df.to_csv(position_file, index=False) # Evaluation value = evaluate(pos_df) print("Info : i={}, Value={}, Max={}".format(i, value, max_value)) if max_value < value: # Update and output. max_value = value new_html(pos_df, 0, 0, max_value) new_csv(pos_df, 0, 0) pos_df.to_csv(best_position_file, index=False) else: # Cancel swap. temp = par_id_list[index2] par_id_list[index2] = par_id_list[index1] par_id_list[index1] = temp print("Info : Finished.") </code></pre> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 2か所を選んで 交換し、評価値が上がれば採用、そうでなければ 元に戻す、<br /> ということを ちまちま 繰り返そうぜ☆」</p> <p><a href="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif?mw=700" alt="KIFUWARABE_80x100x8_01_Futu.gif" /></a><br /> 「 確実だが 時間がかかるぜ☆<br /> 最悪、机の数の2乗ぐらい 回数が かかるんじゃないか☆?」</p> <p><a href="https://crieit.now.sh/upload_images/2f9e11ab9b723e4f2b84676bb6600c915d386006e5efe.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/2f9e11ab9b723e4f2b84676bb6600c915d386006e5efe.png?mw=700" alt="20190724blog51value342.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 これ、評価値342☆」</p> <p><a href="https://crieit.now.sh/upload_images/058791c2dd4c1604ce1bd9ec26d490ae5d2ad86d3991b.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/058791c2dd4c1604ce1bd9ec26d490ae5d2ad86d3991b.gif?mw=700" alt="OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif" /></a><br /> 「 評価関数は ちゃんと働いているようね」</p> <p><a href="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif?mw=700" alt="KIFUWARABE_80x100x8_01_Futu.gif" /></a><br /> 「 緑、赤、青は 自分にあったブロックを選んでいるようにみえるが、まぐれ だからな☆<br /> 最初に 自分に合わないブロックに集まってしまうと、<br /> そこから出ようとしなくなるのは 想像付くぜ☆」</p> <p><a href="https://crieit.now.sh/upload_images/78001482743426a16de3a3b15a1bf2435d386e4029ed3.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/78001482743426a16de3a3b15a1bf2435d386e4029ed3.png?mw=700" alt="20190724blog51value390.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif?mw=700" alt="KIFUWARABE_80x100x8_01_Futu.gif" /></a><br /> 「 例えば このように、 赤 が小さいブロックに陣取ってしまうと、もう修正がきかない☆<br /> これを <strong>極大の丘に登る</strong> という☆<br /> わたしたちは <strong>最大の丘に登りたい</strong> んだぜ☆」</p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 ひとまず 1000回で探索を終了するのではなく、どこを1つ交換しても評価値が上がらなくときに<br /> 終了するように変更しようぜ☆?」</p> <p><a href="https://crieit.now.sh/upload_images/058791c2dd4c1604ce1bd9ec26d490ae5d2ad86d3991b.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/058791c2dd4c1604ce1bd9ec26d490ae5d2ad86d3991b.gif?mw=700" alt="OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif" /></a><br /> 「 じゃあ ランダムに2か所選んで交換するのではなく、机の数の2乗÷2 の組み合わせを あらかじめ作って<br /> シャッフルするの?」</p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 机の数が 300 なら 90000 の組み合わせがあるのか……☆<br /> じゃあ やっぱ ランダム・ヒットで☆」</p> <pre><code>import os import random import pandas as pd from my_lib.html_generator.css_builder import new_csv from my_lib.html_generator.html_builder import new_html from my_lib.html_generator.json_builder import new_json from my_lib.entry_list import new_entry_lists_from_mappings from my_lib.entry_list import read_entry_lists from my_lib.mapper import new_mappings from my_lib.position import new_position from my_lib.build_floor_map import convert_floor_map from evaluation import evaluate # Location. block_file = "./event-placement-ai/input-data/block.txt" table_file = "./event-placement-ai/input-data/table.txt" best_position_file = "./event-placement-ai/output-data/best-position.csv" position_file = "./event-placement-ai/auto-generated/position.csv" floor_file = "./event-placement-ai/auto-generated/floor.csv" participant_file = "./event-placement-ai/input-data/participant.csv" best_mappings_file = "./event-placement-ai/auto-generated/best-mappings.csv" # Read a floor. floor_df = convert_floor_map(block_file, table_file) floor_df.to_csv(floor_file, index=False) if os.path.isfile(best_mappings_file): tbl_id_list, par_id_list = new_entry_lists_from_mappings( best_mappings_file) else: tbl_id_list, par_id_list = read_entry_lists(floor_file, participant_file) # print(&quot;Info : Participants count: {}&quot;.format(len(par_id_list))) # print(&quot;Info : Table count: {}&quot;.format(len(tbl_id_list))) # Sort table. tbl_id_list.sort() # random.shuffle(tbl_id_list) # Shuffule at first. # random.shuffle(par_id_list) prod_num = 0 time_num = 0 retry = True max_value = -1 while retry: retry = False for i in range(0, 1000): time_num += 1 # Random swap. size = len(par_id_list) index1 = random.randint(0, size-1) index2 = random.randint(0, size-1) # print("size={}, index1={}, index2={}".format(size, index1, index2)) temp = par_id_list[index1] par_id_list[index1] = par_id_list[index2] par_id_list[index2] = temp mappings_df = new_mappings(tbl_id_list, par_id_list) participant_df = pd.read_csv(participant_file) pos_df = new_position(floor_df, participant_df, mappings_df) """ output ------ X,Y,BLOCK,PARTICIPANT,TABLE,GENRE_CODE 0,0,C,1,27,Red 1,0,C,2,26,Red 2,0,C,3,25,Blue 3,0,C,4,24,Blue 4,0,C,5,23,Green """ pos_df.to_csv(position_file, index=False) # Evaluation value = evaluate(pos_df) print("Info : i={}, Value={}, Max={}".format(i, value, max_value)) if max_value < value: # Update and output. max_value = value new_html(pos_df, prod_num, time_num, max_value) new_csv(pos_df, prod_num, time_num) new_json(pos_df, prod_num, time_num, max_value) mappings_df.to_csv(best_mappings_file, index=False) pos_df.to_csv(best_position_file, index=False) retry = True else: # Cancel swap. temp = par_id_list[index2] par_id_list[index2] = par_id_list[index1] par_id_list[index1] = temp print("Info : Finished.") </code></pre> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 あれっ、ループの中で ファイル読込してしまっている☆<br /> 遅いわけだぜ☆」</p> <p><a href="https://crieit.now.sh/upload_images/40e4c3d70b0907685e4ae07ea23314575d39a32d97802.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/40e4c3d70b0907685e4ae07ea23314575d39a32d97802.png?mw=700" alt="20190725blog52value409.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 評価値が 409 にもなると、ランダムでは 1000回 入れ替えても 評価値が上がらなかったぜ☆」</p> <p><a href="https://crieit.now.sh/upload_images/058791c2dd4c1604ce1bd9ec26d490ae5d2ad86d3991b.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/058791c2dd4c1604ce1bd9ec26d490ae5d2ad86d3991b.gif?mw=700" alt="OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif" /></a><br /> 「 テーブル番号順で 同じ色が連続したら 評価値1点 追加しない?」</p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 評価関数が 机の数 分だけ重たくなるぜ☆ まあ O(n) なら軽微か……☆」</p> <p>evaluation.py</p> <pre><code>def evaluate(pos_df): # 評価値 value = 0 # block_dict[block][genre_code] = value block_dict = {} for _index, row in pos_df.iterrows(): # x = row["X"] # y = row["Y"] block = row["BLOCK"] # table_id = row["TABLE"] # participant_id = row["PARTICIPANT"] genre_code = row["GENRE_CODE"] if not(block in block_dict): block_dict[block] = {} if not(genre_code in block_dict[block]): block_dict[block][genre_code] = 0 block_dict[block][genre_code] += 1 # 集計。ブロックに同じ色が集まっているほど高評価。 for _block_name, genre_code_dict in block_dict.items(): for _genre_code_name, count in genre_code_dict.items(): value += count ** 2 break # 集計。テーブル番号順にして、同じ色が連続したら 1点加点。 sorted_pos_df = pos_df.sort_values(by=["TABLE"], ascending=True) # print(sorted_pos_df.head(5)) table_ordered_list = sorted_pos_df[["TABLE", "GENRE_CODE"]].values.tolist() # print("table_ordered_list: {}".format(table_ordered_list)) prev_genre_code = None for entry in table_ordered_list: if prev_genre_code == entry[1]: value += 1 # print("prev_genre_code: {}, entry[1]: {}, value: {}".format( # prev_genre_code, entry[1], value)) else: prev_genre_code = entry[1] return value </code></pre> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 評価関数に 同じ色のテーブルが続いたら1点追加☆」</p> <p><a href="https://crieit.now.sh/upload_images/d4ea65283a8208413c37495717cfe97f5d39ae650552a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d4ea65283a8208413c37495717cfe97f5d39ae650552a.png?mw=700" alt="20190725blog53value458.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 ランダムだと こんなところで止まるな☆」</p> <p><a href="https://crieit.now.sh/upload_images/058791c2dd4c1604ce1bd9ec26d490ae5d2ad86d3991b.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/058791c2dd4c1604ce1bd9ec26d490ae5d2ad86d3991b.gif?mw=700" alt="OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif" /></a><br /> 「 2個つながっている黒のところに 青を持っていかないのは、入れ替えても 同点だからね。<br /> 連続していたら1点追加じゃなくて、連続していた数だけ追加 にしたら<br /> もっと つながると思うわよ?」</p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 細かい点 拾っていくの わらう☆」</p> <pre><code> # 集計。テーブル番号順にして、同じ色が連続したら、連続した数だけ加点。 continue_bonus = 0 sorted_pos_df = pos_df.sort_values(by=["TABLE"], ascending=True) # print(sorted_pos_df.head(5)) table_ordered_list = sorted_pos_df[["TABLE", "GENRE_CODE"]].values.tolist() # print("table_ordered_list: {}".format(table_ordered_list)) prev_genre_code = None for entry in table_ordered_list: if prev_genre_code == entry[1]: continue_bonus += 1 value += continue_bonus # print("prev_genre_code: {}, entry[1]: {}, value: {}".format( # prev_genre_code, entry[1], value)) else: prev_genre_code = entry[1] continue_bonus = 0 </code></pre> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 こんな感じで どうか☆?」</p> <p><a href="https://crieit.now.sh/upload_images/4fe4887073cce0930709aa1cefb2c7d45d39b40101294.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/4fe4887073cce0930709aa1cefb2c7d45d39b40101294.png?mw=700" alt="20190725blog54value620.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif?mw=700" alt="KIFUWARABE_80x100x8_01_Futu.gif" /></a><br /> 「 良いんじゃないか、夢美☆」</p> <p><a href="https://crieit.now.sh/upload_images/058791c2dd4c1604ce1bd9ec26d490ae5d2ad86d3991b.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/058791c2dd4c1604ce1bd9ec26d490ae5d2ad86d3991b.gif?mw=700" alt="OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif" /></a><br /> 「 49のグレーと 19のスカイブルーが入れ替わって欲しいんだけど、<br /> テーブル1つ1つずつのランダムじゃなくて、ジャンルコードが連続するテーブルの両端以外のテーブルは除いたあとでのランダムって<br /> できないの?」</p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 できるが、仕事帰りに ゆったりするはずの わたしの休みが 消し飛ぶ……☆」</p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 ダメだ今日中に 終わんね☆<br /> ランダムなスワップだけでは 評価関数で ごり押しするにも すぐ上限がくる☆<br /> 次回から ランダムをやめて 探索部を作り込んでいこうぜ☆」</p> <h2 id="のどがいたい"><a href="#%E3%81%AE%E3%81%A9%E3%81%8C%E3%81%84%E3%81%9F%E3%81%84">のどがいたい</a></h2> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 ゲホッ☆ ゴホッ☆」</p> <p><a href="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif?mw=700" alt="KIFUWARABE_80x100x8_01_Futu.gif" /></a><br /> 「 寝ろ☆」</p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 探索部を書く前に、ブロックの中のジャンルコードの両端の2つの机、あるいは単独の1つの机を ピックアップするモジュールを作りたい☆<br /> 絵を描いて説明すると……☆」</p> <p><a href="https://crieit.now.sh/upload_images/85005747b3b33349052c4ae507e1ee225d3af3fa19fb2.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/85005747b3b33349052c4ae507e1ee225d3af3fa19fb2.png?mw=700" alt="20190726blog55a1.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 すべての机から ランダムに2つ選ぶのではなく、<br /> 上図の赤丸で示した机から ランダムに2つ選びたい☆」</p> <p><a href="https://crieit.now.sh/upload_images/058791c2dd4c1604ce1bd9ec26d490ae5d2ad86d3991b.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/058791c2dd4c1604ce1bd9ec26d490ae5d2ad86d3991b.gif?mw=700" alt="OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif" /></a><br /> 「 定義を緩めると、かんたんに実装できるわよ?」</p> <p><a href="https://crieit.now.sh/upload_images/058791c2dd4c1604ce1bd9ec26d490ae5d2ad86d3991b.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/058791c2dd4c1604ce1bd9ec26d490ae5d2ad86d3991b.gif?mw=700" alt="OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif" /></a><br /> 「 連続するジャンルコードの 始端と終端、または 単独のジャンルコード を選べばいいのよ」</p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 そうしよ……☆」</p> <pre><code>import os import random import pandas as pd from my_lib.html_generator.css_builder import new_csv from my_lib.html_generator.html_builder import new_html from my_lib.html_generator.json_builder import new_json from my_lib.entry_list import new_entry_lists_from_mappings from my_lib.entry_list import read_entry_lists from my_lib.mapper import new_mappings from my_lib.position import new_position from my_lib.build_floor_map import convert_floor_map from evaluation import evaluate # Location. block_file = "./event-placement-ai/input-data/block.txt" table_file = "./event-placement-ai/input-data/table.txt" participant_file = "./event-placement-ai/input-data/participant.csv" position_file = "./event-placement-ai/auto-generated/position-{}-{}-{}.csv" floor_file = "./event-placement-ai/auto-generated/floor.csv" best_mappings_file = "./event-placement-ai/auto-generated/best-mappings.csv" # Read a floor. floor_df = convert_floor_map(block_file, table_file) floor_df.to_csv(floor_file, index=False) participant_df = pd.read_csv(participant_file) if os.path.isfile(best_mappings_file): tbl_id_list, par_id_list = new_entry_lists_from_mappings( best_mappings_file) # print("len(tbl_id_list): {}".format(len(tbl_id_list))) # print("len(par_id_list): {}".format(len(par_id_list))) # print("tbl_id_list: {}".format(tbl_id_list)) # print("par_id_list: {}".format(par_id_list)) genre_code_list = [] for i in range(0, len(tbl_id_list)): temp_df = participant_df[participant_df.ID == par_id_list[i]] temp_df = temp_df['GENRE_CODE'] # print(temp_df.head(5)) # print("temp_df.values.tolist()[0]: {}".format( # temp_df.values.tolist()[0])) genre_code_list.append(temp_df.values.tolist()[0]) # print("len(genre_code_list): {}".format(len(genre_code_list))) # print("genre_code_list: {}".format(genre_code_list)) else: tbl_id_list, par_id_list, genre_code_list = read_entry_lists( floor_file, participant_df) # print(&quot;Info : Participants count: {}&quot;.format(len(par_id_list))) # print(&quot;Info : Table count: {}&quot;.format(len(tbl_id_list))) # テーブル番号を崩さずスキャンしたいので、ソートしない。 # tbl_id_list.sort() # random.shuffle(tbl_id_list) # Shuffule at first. # random.shuffle(par_id_list) prod_num = 0 var_num = 0 progress_num = 0 retry = True max_value = -1 def pick_up_index_list(tbl_id_list, genre_code_list): """ index_list = [] for i in range(0, len(par_id_list)): index_list.append(i) return index_list """ order_list = [0] * len(tbl_id_list) index = 0 for tbl_id in tbl_id_list: order_list[tbl_id-1] = index index += 1 # print("order_list: {}".format(order_list)) index_list = [] prev_genre_code = None prev_index = -1 # 同じジャンルコードが連続しているところは、始点と終点だけを取る。 for index in order_list: genre_code = genre_code_list[index] # print("prev_genre_code: {}, genre_code: {}".format( # prev_genre_code, genre_code)) if prev_genre_code == None: prev_genre_code = genre_code # Index of start. index_list.append(index) elif prev_genre_code != genre_code: prev_genre_code = genre_code # print("start: {}, end: {}".format( # start, current-1)) if index_list[len(index_list)-1] != prev_index: # Index of previous end. index_list.append(prev_index) # Index of start. index_list.append(index) prev_index = index # print("len(genre_code_list)-1: {}".format(len(genre_code_list)-1)) index_list.append(order_list[len(order_list)-1]) # print("index_list: {}".format(index_list)) # # 並び順を崩さないようにすること。 # # result = list(set(index_list)) # # print("result: {}".format(result)) return index_list def choice_index(): # Pick up table. picked_up_index_list = pick_up_index_list(tbl_id_list, genre_code_list) # print("picked_up_index_list: {}".format(picked_up_index_list)) # Random swap. size = len(picked_up_index_list) index11 = random.randint(0, size-1) index12 = random.randint(0, size-1) index1 = picked_up_index_list[index11] index2 = picked_up_index_list[index12] # print("size={}, index1={}, index2={}".format(size, index1, index2)) # print("Choiced index1={}, index2={}".format(index1, index2)) return index1, index2 def swap_par(index1, index2, par_id_list, genre_code_list): """ テーブルIDは固定し、参加者IDを入れ替えます。 """ temp_par_id = par_id_list[index1] temp_genre_code = genre_code_list[index1] par_id_list[index1] = par_id_list[index2] genre_code_list[index1] = genre_code_list[index2] par_id_list[index2] = temp_par_id genre_code_list[index2] = temp_genre_code return while retry: retry = False for i in range(0, 1000): progress_num += 1 index1, index2 = choice_index() swap_par(index1, index2, par_id_list, genre_code_list) mappings_df = new_mappings(tbl_id_list, par_id_list) pos_df = new_position(floor_df, participant_df, mappings_df) # Evaluation value = evaluate(pos_df) print("Info : i={}, Value={}, Max={}".format(i, value, max_value)) if max_value < value: # Update and output. max_value = value new_html(pos_df, prod_num, var_num, progress_num, max_value) new_csv(pos_df, prod_num, var_num, progress_num) new_json(pos_df, prod_num, var_num, progress_num, max_value) mappings_df.to_csv(best_mappings_file, index=False) pos_df.to_csv(position_file.format( prod_num, var_num, progress_num), index=False) retry = True else: # Cancel swap. swap_par(index2, index1, par_id_list, genre_code_list) """ temp = par_id_list[index2] par_id_list[index2] = par_id_list[index1] par_id_list[index1] = temp """ print("Info : Finished.") </code></pre> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 ぜんぜん簡単ではなかった……☆」</p> <p><a href="https://crieit.now.sh/upload_images/8c02149fa1692f87a97079a748d15d855d3b4014d220c.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/8c02149fa1692f87a97079a748d15d855d3b4014d220c.png?mw=700" alt="20190727blog56a1.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 人工知能どころか 機械学習も無しの ただのアルゴリズムで 結構揃うものだ……☆」</p> <p><a href="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif?mw=700" alt="KIFUWARABE_80x100x8_01_Futu.gif" /></a><br /> 「 黄色はもっと まとまるな☆」</p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 ブロックで切れてないので、上図の黄色はつながっている☆」</p> <p><a href="https://crieit.now.sh/upload_images/058791c2dd4c1604ce1bd9ec26d490ae5d2ad86d3991b.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/058791c2dd4c1604ce1bd9ec26d490ae5d2ad86d3991b.gif?mw=700" alt="OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif" /></a><br /> 「 ブロックで切りましょう!」</p> <p><a href="https://crieit.now.sh/upload_images/b1c02c3894669f5e1db741a92ea6cd135d3bcab1a27b6.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/b1c02c3894669f5e1db741a92ea6cd135d3bcab1a27b6.png?mw=700" alt="20190727blog58a2.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 じゃあ一旦、初期配置をシャッフルするぜ☆<br /> 少しずつ良くしていくような最適化は、一度付いた癖は 直らないからな☆」</p> <p><a href="https://crieit.now.sh/upload_images/f9c18b11da03275424140ec9deaca8825d3bcdf6227b1.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/f9c18b11da03275424140ec9deaca8825d3bcdf6227b1.png?mw=700" alt="20190727blog58a3.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 そして最適化されたのが これだぜ☆」</p> <p><a href="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif?mw=700" alt="KIFUWARABE_80x100x8_01_Futu.gif" /></a><br /> 「 白はもっと くっつきそうなものだが☆<br /> 赤も <strong>極大</strong> に登りあがってしまった☆」</p> <p><a href="https://crieit.now.sh/upload_images/058791c2dd4c1604ce1bd9ec26d490ae5d2ad86d3991b.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/058791c2dd4c1604ce1bd9ec26d490ae5d2ad86d3991b.gif?mw=700" alt="OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif" /></a><br /> 「 青、緑、黄 は なかなかのものじゃない?」</p> <p><a href="https://crieit.now.sh/upload_images/579ae89b347ee1e23917c2678d96f0ad5d3bd0792e7a9.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/579ae89b347ee1e23917c2678d96f0ad5d3bd0792e7a9.png?mw=700" alt="20190727blog58a4.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 じゃあ 初期配置をまた シャッフルして……、って<br /> ぜんぜん シャッフルされてないじゃないか☆!」</p> <p><a href="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif?mw=700" alt="KIFUWARABE_80x100x8_01_Futu.gif" /></a><br /> 「 ぜんぜん テストもせずに エクステンド(増築)してるからな☆<br /> 結果の正当性も疑わしいものだぜ☆」</p> <p><a href="https://crieit.now.sh/upload_images/c38ffe8d0c59a2948e4d4465667fdd4b5d3bd4413134c.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/c38ffe8d0c59a2948e4d4465667fdd4b5d3bd4413134c.png?mw=700" alt="20190727blog58a5.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 少し異なるとか、同じとか、初期配置が どれほどの影響があるか分からないが、ランダム配置であることは重要だろう☆」</p> <p><a href="https://crieit.now.sh/upload_images/058791c2dd4c1604ce1bd9ec26d490ae5d2ad86d3991b.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/058791c2dd4c1604ce1bd9ec26d490ae5d2ad86d3991b.gif?mw=700" alt="OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif" /></a><br /> 「 1個浮いている緑は 橙色のところに移したいけど、そうすると橙色が離れてしまうから、<br /> 2か所の交換だけではなく、3か所同時交換 とか有効そうじゃない?」</p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 ランダムな組み合わせが爆発して どうでもいいところで 3か所同時交換するばかりに なる気もするが……☆」</p> <p><a href="https://crieit.now.sh/upload_images/058791c2dd4c1604ce1bd9ec26d490ae5d2ad86d3991b.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/058791c2dd4c1604ce1bd9ec26d490ae5d2ad86d3991b.gif?mw=700" alt="OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif" /></a><br /> 「 もっとスワップの精度を上げていきましょう! 例えば!」</p> <p><a href="https://crieit.now.sh/upload_images/978c213d85405a6626512af215ef78f55d3bec37b84b2.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/978c213d85405a6626512af215ef78f55d3bec37b84b2.png?mw=700" alt="20190727blog59a1.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/058791c2dd4c1604ce1bd9ec26d490ae5d2ad86d3991b.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/058791c2dd4c1604ce1bd9ec26d490ae5d2ad86d3991b.gif?mw=700" alt="OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif" /></a><br /> 「 同じジャンルコード動詞で スワップ しても スワップしたことにならないので、<br /> 違う色動詞で スワップするようにしなさい」</p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 さすがご主人さま、細かいところを拾っていく……☆」</p> <pre><code>def choice_index(): # Pick up table. picked_up_index_list = pick_up_index_list(tbl_id_list, genre_code_list) # print("picked_up_index_list: {}".format(picked_up_index_list)) # リトライ回数が多すぎると、終わりたいときに、逆に終わらないかもしれない。 retry = 3 genre_code1 = None genre_code2 = None while genre_code1 == genre_code2 and 0 < retry: # Random choice at first. size = len(picked_up_index_list) index11 = random.randint(0, size-1) index1 = picked_up_index_list[index11] genre_code1 = genre_code_list[index1] # 同じ色はなるべく選ばない。 index12 = random.randint(0, size-1) index2 = picked_up_index_list[index12] genre_code2 = genre_code_list[index2] retry -= 1 # print("size={}, index1={}, index2={}".format(size, index1, index2)) # print("Choiced index1={}, index2={}".format(index1, index2)) return index1, index2 </code></pre> <p><a href="https://crieit.now.sh/upload_images/f830e77e2503c022812a4549957dd7ad5d3bfeda214d2.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/f830e77e2503c022812a4549957dd7ad5d3bfeda214d2.png?mw=700" alt="20190727blog60a1.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/afa19704f8b5fe086ab6b4250da409615d3bfee57721b.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/afa19704f8b5fe086ab6b4250da409615d3bfee57721b.png?mw=700" alt="20190727blog60a2.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 なるほど、すごい速さで席替えが進むぜ……☆」</p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 しかし 緑が1個浮いている気がするが、くっつけなかったのかだぜ☆?」</p> <p><a href="https://crieit.now.sh/upload_images/058791c2dd4c1604ce1bd9ec26d490ae5d2ad86d3991b.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/058791c2dd4c1604ce1bd9ec26d490ae5d2ad86d3991b.gif?mw=700" alt="OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif" /></a><br /> 「 10と55を ピンポイントで入れ替えるのは 確率が低いんじゃない?<br /> それか 改造したコードがエンバグしたか」</p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 いったい どういう確率なのかも ページに表示したいよな☆」</p> <p><a href="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif?mw=700" alt="KIFUWARABE_80x100x8_01_Futu.gif" /></a><br /> 「 JSONを Java Script で読み込んで、writeln したらどうだぜ☆?」</p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 手間だが それが1番かだぜ☆」</p> <p>placement-0-0-5412.json</p> <pre><code>{ "test": 0, "variation": 0, "progress": 5412, "value" : 614 } </code></pre> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 json(ジェイソン)は こんな感じでいいかだぜ☆」</p> <p><a href="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif?mw=700" alt="KIFUWARABE_80x100x8_01_Futu.gif" /></a><br /> 「 HTMLファイルから読めるか☆?」</p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 web-server を立ててたら読めるんだが、プログラマーでない読者に サーバー立てろとか言っても むずかしいだろうしな……☆」</p> <p><a href="https://crieit.now.sh/upload_images/058791c2dd4c1604ce1bd9ec26d490ae5d2ad86d3991b.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/058791c2dd4c1604ce1bd9ec26d490ae5d2ad86d3991b.gif?mw=700" alt="OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif" /></a><br /> 「 HTMLファイルに JSONを直書きしたら?」</p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 豪快だな……☆」</p> <pre><code>def new_json(test_number, variation_number, progress_num, value): return """ <span>{</span><span>{</span> "test": {0}, "variation": {1}, "progress": {2}, "value" : {3} <span>}</span><span>}</span> """.format(test_number, variation_number, progress_num, value) </code></pre> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 じゃあ JSONのテキストを書く部分だけを、モジュールに切りだそう☆」</p> <pre><code>import pandas as pd def write_json(test_number, variation_number, progress_num, json): # Location. json_file = "./event-placement-ai/auto-generated/placement-{}-{}-{}.json" try: file = open(json_file.format( test_number, variation_number, progress_num), 'w', encoding='utf-8') file.write(json) except Exception as e: print(e) finally: file.close() return def new_json(test_number, variation_number, progress_num, value): return """ <span>{</span><span>{</span> "test" : {0}, "variation" : {1}, "progress" : {2}, "value" : {3} <span>}</span><span>}</span> """.format(test_number, variation_number, progress_num, value) </code></pre> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 京アニ爆発事件の生き残りも 1人減った☆ まだ分からなさそうだぜ☆<br /> あたまに集中力が入らん☆<br /> これだけ 書き直すのに 5時間ぐらいかかった……☆」</p> <p><a href="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif?mw=700" alt="KIFUWARABE_80x100x8_01_Futu.gif" /></a><br /> 「 腰が入ってないな☆」</p> <p><a href="https://crieit.now.sh/upload_images/8d4dd55742c3434e56300a73d8c835e25d3c5b6a0ef52.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/8d4dd55742c3434e56300a73d8c835e25d3c5b6a0ef52.png?mw=700" alt="20190727blog62a1.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 このブログに画像貼り付けるのも 記憶が飛んでしまう☆」</p> <p><a href="https://crieit.now.sh/upload_images/058791c2dd4c1604ce1bd9ec26d490ae5d2ad86d3991b.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/058791c2dd4c1604ce1bd9ec26d490ae5d2ad86d3991b.gif?mw=700" alt="OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif" /></a><br /> 「 JSONを 直書きできてるじゃない。 十分、十分」</p> <h2 id="次の日"><a href="#%E6%AC%A1%E3%81%AE%E6%97%A5">次の日</a></h2> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 もうプログラムするのも嫌だ☆(^~^) 仕事に行くのも嫌だぜ☆(^~^)」</p> <p><a href="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif?mw=700" alt="KIFUWARABE_80x100x8_01_Futu.gif" /></a><br /> 「 いつものことじゃないか☆」</p> <p><a href="https://crieit.now.sh/upload_images/7918b8c933145c029fbdfd150a55123e5d3edc14da9df.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/7918b8c933145c029fbdfd150a55123e5d3edc14da9df.png?mw=700" alt="20190729blog63a1.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/058791c2dd4c1604ce1bd9ec26d490ae5d2ad86d3991b.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/058791c2dd4c1604ce1bd9ec26d490ae5d2ad86d3991b.gif?mw=700" alt="OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif" /></a><br /> 「 この離れ離れになってるのは くっつけれないの?」</p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 場所を入れ替えて 等価値 だったら 入れ替えないからな☆<br /> ずれることもないし、動かないぜ☆」</p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 入れ替えではなく、挿入だったら もっと かき混ぜれるのかだぜ☆? 例えば……☆」</p> <p><a href="https://crieit.now.sh/upload_images/f6bd711228d5d37f857dfc59708aa7055d3ede7dbc4e9.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/f6bd711228d5d37f857dfc59708aa7055d3ede7dbc4e9.png?mw=700" alt="20190729blog63a2.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 同じブロックで 離れ離れ になっているブロックは 挿入でくっつけるとか☆」</p> <p><a href="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif?mw=700" alt="KIFUWARABE_80x100x8_01_Futu.gif" /></a><br /> 「 やれだぜ☆」</p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 じゃあ まず シフト を実装しようぜ☆?」</p> <pre><code>participants = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] blocks = ['A', 'A', 'A', 'B', 'B', 'B', 'B', 'C', 'C', 'C'] print("participants: {}.".format(participants)) print("blocks: {}.".format(blocks)) def shift_smaller(): """ ブロック単位でシフトします。[1,2,3,4]を、[2,3,4,1]にする動きです。 """ prev_block = None # テーブルID順に並んでいるとします。 for i in range(0, 10): print("i:{}, blocks[i]: {}, prev_block: {}.".format( i, blocks[i], prev_block)) if prev_block == blocks[i]: # Swap. temp = participants[i-1] participants[i-1] = participants[i] participants[i] = temp prev_block = blocks[i] shift_smaller() print("participants: {}.".format(participants)) </code></pre> <pre><code>participants: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]. blocks: ['A', 'A', 'A', 'B', 'B', 'B', 'B', 'C', 'C', 'C']. i:0, blocks[i]: A, prev_block: None. i:1, blocks[i]: A, prev_block: A. i:2, blocks[i]: A, prev_block: A. i:3, blocks[i]: B, prev_block: A. i:4, blocks[i]: B, prev_block: B. i:5, blocks[i]: B, prev_block: B. i:6, blocks[i]: B, prev_block: B. i:7, blocks[i]: C, prev_block: B. i:8, blocks[i]: C, prev_block: C. i:9, blocks[i]: C, prev_block: C. participants: [2, 3, 1, 5, 6, 7, 4, 9, 10, 8]. </code></pre> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 こういうのは 小さなプログラムを書いて、まずテストだぜ☆」</p> <pre><code>def shift_bigger(): """ ブロック単位でシフトします。[1,2,3,4]を、[4, 1, 2, 3]にする動きです。 """ prev_block = None # テーブルID順に並んでいるとします。 for i in reversed(range(0, 10)): print("i:{}, blocks[i]: {}, prev_block: {}.".format( i, blocks[i], prev_block)) if prev_block == blocks[i]: # Swap. temp = participants[i] participants[i] = participants[i+1] participants[i+1] = temp prev_block = blocks[i] </code></pre> <pre><code>participants: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]. blocks: ['A', 'A', 'A', 'B', 'B', 'B', 'B', 'C', 'C', 'C']. i:9, blocks[i]: C, prev_block: None. i:8, blocks[i]: C, prev_block: C. i:7, blocks[i]: C, prev_block: C. i:6, blocks[i]: B, prev_block: C. i:5, blocks[i]: B, prev_block: B. i:4, blocks[i]: B, prev_block: B. i:3, blocks[i]: B, prev_block: B. i:2, blocks[i]: A, prev_block: B. i:1, blocks[i]: A, prev_block: A. i:0, blocks[i]: A, prev_block: A. participants: [3, 1, 2, 7, 4, 5, 6, 10, 8, 9]. </code></pre> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 逆順もないと 戻せないよな☆」</p> <pre><code>def shift_smaller(): """ ブロック単位でシフトします。[1,2,3,4]を、[2,3,4,1]にする動きです。 """ prev_block = None # テーブルID順に並んでいるとします。 for index, block in enumerate(block_list): # for index, row in floor_df.iterrows(): if prev_block == block: swap_participant( index-1, index, par_id_list, genre_code_list) prev_block = block return def shift_bigger(): """ ブロック単位でシフトします。[1,2,3,4]を、[4, 1, 2, 3]にする動きです。 """ prev_block = None index = len(block_list)-1 # テーブルID順に並んでいるとします。 for block in reversed(block_list): # print("shift_bigger: index={}, block={}.".format(index, block)) if prev_block == block: swap_participant( index, index+1, par_id_list, genre_code_list) prev_block = block index -= 1 return </code></pre> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 pandas の API がトンチンカンなんで、結局リストに出してシフト☆」</p> <p><a href="https://crieit.now.sh/upload_images/cc48ef85d527f42b81b33d17408b17745d3f04a12ff69.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/cc48ef85d527f42b81b33d17408b17745d3f04a12ff69.png?mw=700" alt="20190729blog63a3.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif?mw=700" alt="KIFUWARABE_80x100x8_01_Futu.gif" /></a><br /> 「 テーブル1個ずつのシフトではなく、かたまりで シフトしないとな☆ ごそっと☆」</p> <h2 id="また次の日"><a href="#%E3%81%BE%E3%81%9F%E6%AC%A1%E3%81%AE%E6%97%A5">また次の日</a></h2> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 先頭から 連続するジャンルコードのテーブル数を数えるモジュールが欲しいな☆<br /> 名前は count_joined_genre_code とかかだぜ☆?」</p> <p><a href="https://crieit.now.sh/upload_images/f45b13fb2b0ed4149ccc66ccece9120f5d4038dd08398.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/f45b13fb2b0ed4149ccc66ccece9120f5d4038dd08398.png?mw=700" alt="20190730blog64a1.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 つまり 上図の赤丸のところを数えるんだぜ☆<br /> 10、4、14、1、8、4 みたいな感じ☆」</p> <pre><code>genre_code_list = ['green', 'green', 'blue', 'red', 'red', 'blue', 'yellow', 'black', 'black', 'black'] block_list = ['A', 'A', 'A', 'B', 'B', 'B', 'B', 'C', 'C', 'C'] def count_joined_genre_code(): """ TODO 同じブロック内での、連続するジャンルコードの数。 """ count = 0 result_dict = {} prev_block = None prev_genre_code = None for idx in range(0, len(block_list)): block = block_list[idx] genre_code = genre_code_list[idx] if prev_block != block or prev_genre_code != genre_code: if prev_block not in result_dict: result_dict[prev_block] = [] result_dict[prev_block].append(count) count = 1 else: count += 1 prev_block = block prev_genre_code = genre_code # last if prev_block not in result_dict: result_dict[prev_block] = [] result_dict[prev_block].append(count) return result_dict result_dict = count_joined_genre_code() print("result_dict: {}.".format(result_dict)) </code></pre> <pre><code>result_dict: {None: [0], 'A': [2, 1], 'B': [2, 1, 1], 'C': [3]}. </code></pre> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 サンプル・プログラムを作って試しながら 動くまで持っていくのが 開発だぜ☆<br /> 作っているプログラムに いきなり拡張するのは テストがしにくいからな☆」</p> <h2 id="次の次の次の日"><a href="#%E6%AC%A1%E3%81%AE%E6%AC%A1%E3%81%AE%E6%AC%A1%E3%81%AE%E6%97%A5">次の次の次の日</a></h2> <p><a href="https://crieit.now.sh/upload_images/dbb72ed0116037d5270e86737cd16a645d41835d6a33e.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/dbb72ed0116037d5270e86737cd16a645d41835d6a33e.png?mw=700" alt="20190731blog65a1.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 先頭の10個抜いて、うしろを 10個詰めて、空いた10個のところに先頭の10個を埋めたいぜ☆」</p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 また、それをアンドゥする動きも欲しいよな☆」</p> <p><a href="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif?mw=700" alt="KIFUWARABE_80x100x8_01_Futu.gif" /></a><br /> 「 スワップを使ってばかりではなく、スタックとムーブをそろそろ作るべきでは☆?」</p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 うっ、ループ書くの 苦し……☆」</p> <pre><code>participants = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] blocks = ['A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'B', 'B'] print("participants: {}.".format(participants)) print("blocks: {}.".format(blocks)) def for_block_asc(callback_head_block, callback_same_block): """ ブロックの切れ目が分かるループです。昇順。 """ # テーブルID順に並んでいるとします。 prev_block = None for i in range(0, len(blocks)): if prev_block == blocks[i]: callback_same_block(i, blocks[i]) else: callback_head_block(i, blocks[i]) prev_block = blocks[i] return def for_block_desc(callback_tail_block, callback_same_block): """ ブロックの切れ目が分かるループです。降順。 """ # テーブルID順に並んでいるとします。 prev_block = None for i in reversed(range(0, len(blocks))): if prev_block == blocks[i]: callback_same_block(i, blocks[i]) else: callback_tail_block(i, blocks[i]) prev_block = blocks[i] return print("Info : for_block_asc.") for_block_asc( lambda i, block: print("Head: i={}, block={}.".format(i, block)), lambda i, block: print("Same: i={}, block={}.".format(i, block)) ) print("Info : for_block_desc.") for_block_desc( lambda i, block: print("Tail: i={}, block={}.".format(i, block)), lambda i, block: print("Same: i={}, block={}.".format(i, block)) ) print("Info : Finished.") </code></pre> <pre><code>participants: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]. blocks: ['A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'B', 'B']. Info : for_block_asc. Head: i=0, block=A. Same: i=1, block=A. Same: i=2, block=A. Same: i=3, block=A. Same: i=4, block=A. Same: i=5, block=A. Same: i=6, block=A. Same: i=7, block=A. Head: i=8, block=B. Same: i=9, block=B. Info : for_block_desc. Tail: i=9, block=B. Same: i=8, block=B. Tail: i=7, block=A. Same: i=6, block=A. Same: i=5, block=A. Same: i=4, block=A. Same: i=3, block=A. Same: i=2, block=A. Same: i=1, block=A. Same: i=0, block=A. Info : Finished. </code></pre> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 ループのコードは 関数に隠してしまうかだぜ☆」</p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 block_list とか tbl_id_list のような よく使うリストを ひとかたまりにできないかだぜ☆?」</p> <p><a href="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif?mw=700" alt="KIFUWARABE_80x100x8_01_Futu.gif" /></a><br /> 「 それこそ position クラスに まとめられないのかだぜ☆?」</p> <p>position-0-0-666.csv</p> <pre><code>X,Y,BLOCK,TABLE,PARTICIPANT,GENRE_CODE 13,5,A,1,57,Green 14,5,A,2,10,Green 15,5,A,3,53,Green </code></pre> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 pandas が扱いやすければ 何も工夫しなくていいんだが、 API がトンチンカンだからな……☆<br /> position クラスを自作するしかないのか……☆」</p> <p><書きかけ></p> むずでょ tag:crieit.net,2005:PublicArticle/15257 2019-07-18T21:36:06+09:00 2019-07-21T19:19:03+09:00 https://crieit.net/posts/8e385f7667458ded933b4bd90e7cd3f3 机を配置しようぜ☆(^~^)?<その1> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 更新回数に上限があるのかも知らん☆ 再投稿で回避だぜ☆!」</p> <h2 id="前の"><a href="#%E5%89%8D%E3%81%AE">前の</a></h2> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 机の配置なら 任せろ☆!」</p> <p><a target="_blank" rel="nofollow noopener" href="https://github.com/muzudho/event-placement-ai">event-placement-ai</a></p> <p><a href="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif?mw=700" alt="KIFUWARABE_80x100x8_01_Futu.gif" /></a><br /> 「 話が見えない☆」</p> <p><a href="https://crieit.now.sh/upload_images/058791c2dd4c1604ce1bd9ec26d490ae5d2ad86d3991b.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/058791c2dd4c1604ce1bd9ec26d490ae5d2ad86d3991b.gif?mw=700" alt="OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif" /></a><br /> 「 ボランティアで 机の配置をするのよ」</p> <p><a href="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif?mw=700" alt="KIFUWARABE_80x100x8_01_Futu.gif" /></a><br /> 「 だから 机の配置 とは何なのか☆?」</p> <p><a href="https://crieit.now.sh/upload_images/e381e82fb47a98d90c511c941124f19a5d2ad92c07a46.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e381e82fb47a98d90c511c941124f19a5d2ad92c07a46.png?mw=700" alt="20190714math40a1.png" /></a></p> <p>例。<br /> <a target="_blank" rel="nofollow noopener" href="http://sizer.main.jp/wcsc29/">第29回世界コンピュータ将棋選手権</a><br /> <a target="_blank" rel="nofollow noopener" href="https://kawasaki-sanshinkaikan.jp/gyoumu/kaikan/hall-guide/4f.html">川崎市産業振興会館 4F</a></p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 部屋が こんな感じであるとするだろ☆」</p> <p><a href="https://crieit.now.sh/upload_images/a522b7b29786572b75f1cb5710056b035d2ada79433b8.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/a522b7b29786572b75f1cb5710056b035d2ada79433b8.png?mw=700" alt="20190714math40a1b1.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 2列で並んでるのが 島☆」</p> <p><a href="https://crieit.now.sh/upload_images/e11d468aff72673754c8b726b9e32a135d2adb0de3e8b.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e11d468aff72673754c8b726b9e32a135d2adb0de3e8b.png?mw=700" alt="20190714math40a1b2.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 壁際に並んでるのが 壁 だぜ☆」</p> <p><a href="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif?mw=700" alt="KIFUWARABE_80x100x8_01_Futu.gif" /></a><br /> 「 じゃあ 並べろだぜ☆」</p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 待て☆!」</p> <p><a href="https://crieit.now.sh/upload_images/50b302badd39944cf95115303dfb5d0d5d2adc858e3a0.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/50b302badd39944cf95115303dfb5d0d5d2adc858e3a0.png?mw=700" alt="20190714math40a1b3c1.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 島や 壁には ブロック番号が 振ってあるものだぜ☆」</p> <p><a href="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif?mw=700" alt="KIFUWARABE_80x100x8_01_Futu.gif" /></a><br /> 「 そうか☆ じゃあ 早く 並べろだぜ☆」</p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 待て☆!」</p> <p><a href="https://crieit.now.sh/upload_images/cd8b3f451f45e55ea8b6be659e48dd015d2adde0bac65.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/cd8b3f451f45e55ea8b6be659e48dd015d2adde0bac65.png?mw=700" alt="20190714math40a2.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 参加者の方も 数種類にグループ分けすることができるぜ☆<br /> 外部が見えるルーターが欲しいリモート勢、 電力が大きい勢、 両方勢、 それ以外勢☆」</p> <p><a href="https://crieit.now.sh/upload_images/058791c2dd4c1604ce1bd9ec26d490ae5d2ad86d3991b.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/058791c2dd4c1604ce1bd9ec26d490ae5d2ad86d3991b.gif?mw=700" alt="OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif" /></a><br /> 「 最近は リモートが流行りだから 大きな電源要らないのよ」</p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 すると 必要としている人を 供給があるところに ちょんちょんちょん と置いていくだけで<br /> 答えが出る☆<br /> なんの 考えもいらない……☆」</p> <p><a href="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif?mw=700" alt="KIFUWARABE_80x100x8_01_Futu.gif" /></a><br /> 「 分かったら 早く並べろだぜ☆」</p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 待て☆!」</p> <pre><code>G E C A island +--+--+--+--+ +--+--+--+--+ +--+--+--+--+ +--+--+--+--+ | | | | | | | | | | | | | | | | | | | | +--+--+--+--+ +--+--+--+--+ +--+--+--+--+ +--+--+--+--+ | | | | | | | | | | | | | | | | | | | | +--+--+--+--+ +--+--+--+--+ +--+--+--+--+ +--+--+--+--+ H F D B +--+--+--+--+ +--+--+--+--+ +--+--+--+--+ +--+--+--+--+ | | | | | | | | | | | | | | | | | | | | +--+--+--+--+ +--+--+--+--+ +--+--+--+--+ +--+--+--+--+ | | | | | | | | | | | | | | | | | | | | +--+--+--+--+ +--+--+--+--+ +--+--+--+--+ +--+--+--+--+ </code></pre> <pre><code>A island. [ 1][ 2][ 3][ 4] [ 5][ 6][ 7][ 8] B island. [ 9][ 10][ 11][ 12] [ 13][ 14][ 15][ 16] C island. [ 17][ 18][ 19][ 20] [ 21][ 22][ 23][ 24] D island. [ 25][ 26][ 27][ 28] [ 29][ 30][ 31][ 32] E island. [ 33][ 34][ 35][ 36] [ 37][ 38][ 39][ 40] F island. [ 0][ 0][ 0][ 0] [ 0][ 0][ 0][ 0] G island. [ 0][ 0][ 0][ 0] [ 0][ 0][ 0][ 0] H island. [ 0][ 0][ 0][ 0] [ 0][ 0][ 0][ 0] Info : Finished. </code></pre> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 Python3 を使って 変動する あらゆるチーム数に対応した 最善の席を 算出したい☆」</p> <p><a href="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif?mw=700" alt="KIFUWARABE_80x100x8_01_Futu.gif" /></a><br /> 「 さっさと座るのが最善だぜ☆ 早よ 並べろだぜ☆」</p> <p><a href="https://crieit.now.sh/upload_images/058791c2dd4c1604ce1bd9ec26d490ae5d2ad86d3991b.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/058791c2dd4c1604ce1bd9ec26d490ae5d2ad86d3991b.gif?mw=700" alt="OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif" /></a><br /> 「 参加者数が 40とか50という小さな オーダー のものに 人工知能とか要らないのよ。<br /> 手で ちゃっちゃと やりなさいよ!」</p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 机の配置を 一般化する☆」</p> <p><a href="https://crieit.now.sh/upload_images/d93abba996fc6457b5f8e7e4bbba2dad5d2ae2c541e2c.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d93abba996fc6457b5f8e7e4bbba2dad5d2ae2c541e2c.png?mw=700" alt="20190714math41a1.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 たとえば 入り口が 1か所 のタイプや☆」</p> <p><a href="https://crieit.now.sh/upload_images/058791c2dd4c1604ce1bd9ec26d490ae5d2ad86d3991b.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/058791c2dd4c1604ce1bd9ec26d490ae5d2ad86d3991b.gif?mw=700" alt="OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif" /></a><br /> 「 ひとふで書きすると 詰まる通路の数とか あるわよねぇ」</p> <p><a href="https://crieit.now.sh/upload_images/18404528e78c402788bb57ea67d69fea5d2ae4d31c910.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/18404528e78c402788bb57ea67d69fea5d2ae4d31c910.png?mw=700" alt="20190714math41a1b2.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 1周ぐるりタイプとか いろいろ ある☆」</p> <h1 id="キャンペーンマップ"><a href="#%E3%82%AD%E3%83%A3%E3%83%B3%E3%83%9A%E3%83%BC%E3%83%B3%E3%83%9E%E3%83%83%E3%83%97">キャンペーンマップ</a></h1> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 本編と違うステージとかを キャンペーンマップと言うが、練習用に1つ用意しよう☆」</p> <p><a href="https://crieit.now.sh/upload_images/13e38f6c6608f9eea524f7393b56d3115d2ae888ab7c2.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/13e38f6c6608f9eea524f7393b56d3115d2ae888ab7c2.png?mw=700" alt="20190714math41a1b3c1.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif?mw=700" alt="KIFUWARABE_80x100x8_01_Futu.gif" /></a><br /> 「 なんで こんなところに 柱があるのか……☆」</p> <p><a href="https://crieit.now.sh/upload_images/058791c2dd4c1604ce1bd9ec26d490ae5d2ad86d3991b.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/058791c2dd4c1604ce1bd9ec26d490ae5d2ad86d3991b.gif?mw=700" alt="OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif" /></a><br /> 「 これは 即売会の配置ねぇ。 大会に広い通路は要らないもの」</p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 物を売るイベントの方が 配置が重要だぜ☆ 来場者の動線というものがある☆」</p> <p><a href="https://crieit.now.sh/upload_images/9309d8ec5df5f43e5ae34ed96c9d00585d2aea6a3682a.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/9309d8ec5df5f43e5ae34ed96c9d00585d2aea6a3682a.png?mw=700" alt="20190714math41a1b3c1d1.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 これぐらい小さいところは ブロック番号を分けなくていいんだが、練習なんで 分けている☆<br /> 趣意としては☆」</p> <div class="table-responsive"><table> <thead> <tr> <th>Block</th> <th align="right">Space</th> </tr> </thead> <tbody> <tr> <td>A</td> <td align="right">18</td> </tr> <tr> <td>B</td> <td align="right">4</td> </tr> <tr> <td>C</td> <td align="right">14</td> </tr> <tr> <td>D</td> <td align="right">10</td> </tr> <tr> <td>E</td> <td align="right">8</td> </tr> <tr> <td>F</td> <td align="right">6</td> </tr> </tbody> </table></div> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 スペース数を散らした☆」</p> <p><a href="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif?mw=700" alt="KIFUWARABE_80x100x8_01_Futu.gif" /></a><br /> 「 ひどい配置だぜ☆」</p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 イベント名は CampaignMap1 としょう☆」</p> <pre><code>A island. [ 1][ 2][ 3][ 4][ 5][ 6][ 7][ 8][ 9][ 10][ 11][ 12][ 13][ 14][ 15][ 16][ 17][ 18] B island. [ 19][ 20][ 21][ 22] C island. [ 23][ 24][ 25][ 26][ 27][ 28][ 29][ 30][ 31][ 32][ 33][ 34][ 35][ 36] D island. [ 37][ 38][ 39][ 40][ 41] [ 42][ 43][ 44][ 45][ 46] E island. [ 47][ 48][ 49][ 50] [ 51][ 52][ 53][ 54] F island. [ 55][ 56][ 57] [ 58][ 59][ 60] </code></pre> <p><a href="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif?mw=700" alt="KIFUWARABE_80x100x8_01_Futu.gif" /></a><br /> 「 お父ん、何やってんだぜ☆?」</p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 イベント会場の 電源の配置図とか 載ってないものだな……☆<br /> 色んな会場を 調べてみるかだぜ☆」</p> <p><a target="_blank" rel="nofollow noopener" href="https://www.paradisearmy.com/doujin/pasok_event_hall_list.html">日本全国横断 主要同人イベント会場・コンベンションセンター・メッセ一覧</a></p> <p><a target="_blank" rel="nofollow noopener" href="http://www.bigsight.jp/organizer/price/equipment/">東京ビッグサイト 会議設備・備品利用料金</a><br /> <a target="_blank" rel="nofollow noopener" href="https://kawasaki-sanshinkaikan.jp/gyoumu/kaikan/hall-guide/4f.html">川崎市振興産業会館 4階 企画展示場</a><br /> <a target="_blank" rel="nofollow noopener" href="https://www.pio-ota.net/facilities/daitenji/">大田区産業プラザPIO 大展示場</a><br /> <a target="_blank" rel="nofollow noopener" href="https://www.bellesalle.co.jp/shisetsu/tokyo/bs_akihabara/detail/hall_2fall/">ベルサール秋葉原 2F HALL全体</a></p> <p><a href="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif?mw=700" alt="KIFUWARABE_80x100x8_01_Futu.gif" /></a><br /> 「 電源なんか誰も気にしないんじゃないか☆?」</p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 じゃあ 電源は後回しで☆」</p> <h1 id="Genre code"><a href="#Genre+code">Genre code</a></h1> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 バトル大会では シード組か そうでないか、<br /> 即売会では ジャンル・コード などが配置に大きく関わってくるぜ☆」</p> <p><a href="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif?mw=700" alt="KIFUWARABE_80x100x8_01_Futu.gif" /></a><br /> 「 何用のプログラムを想定しているんだぜ☆?」</p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 人工知能の展示、バトル、即売会だぜ☆」</p> <p><a href="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif?mw=700" alt="KIFUWARABE_80x100x8_01_Futu.gif" /></a><br /> 「 ごった煮だな……☆」</p> <p><a href="https://crieit.now.sh/upload_images/058791c2dd4c1604ce1bd9ec26d490ae5d2ad86d3991b.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/058791c2dd4c1604ce1bd9ec26d490ae5d2ad86d3991b.gif?mw=700" alt="OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif" /></a><br /> 「 バトル大会の人口より 即売会の人口の方が多いでしょう。<br /> 即売会の流儀を参考にしましょう」</p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 じゃあ ジャンル・コードで☆<br /> これは 買いに来る人が 巡回する目印にする分類番号で、<br /> 3時間ぐらいで全部回れるように 関連するジャンルを近づけるように 配慮しろだぜ☆」</p> <p><a href="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif?mw=700" alt="KIFUWARABE_80x100x8_01_Futu.gif" /></a><br /> 「 そんなでかいイベントは あんまりない☆」</p> <ul> <li>event_placement_ai <ul> <li>attribute</li> <li>placement</li> </ul></li> </ul> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 こういうプログラムを作るときは、<br /> 北だの南だの、空間の位置関係を取り扱う部分と<br /> 電力だのジャンルコードだの、属性の相性を取り扱う部分は<br /> 切り分けておくことが 鉄則だぜ☆」</p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 ロジック的なものと、視覚的なものは ケンカ するからな☆」</p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 人間の脳も 左脳と右脳は 脳梁で分けられていると聞くぜ☆<br /> いっしょにすると 足を引っ張り合うんだぜ☆<br /> おそらく、整理された本棚と 作業机の上ぐらい 性格が合わない☆」</p> <pre><code>class Participant(object): """ 参加者データ """ def __init__(self, id, genre_code): self._id = id self._genre_code = genre_code return @property def id(self): return self._id @property def genre_code(self): return self._genre_code </code></pre> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 これがその 整理された本棚 の方にあたるデータに使うやつだぜ☆」</p> <pre><code># Settings of attribute. participant_list = [ Participant(1, "Red"), Participant(2, "Red"), Participant(3, "Blue"), Participant(4, "Blue"), Participant(5, "Green"), Participant(6, "Blue"), Participant(7, "Red"), Participant(8, "Blue"), Participant(9, "Green"), Participant(10, "Green"), ] </code></pre> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 あっ、データ用意するの めんどくせ☆」</p> <p><a href="https://crieit.now.sh/upload_images/058791c2dd4c1604ce1bd9ec26d490ae5d2ad86d3991b.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/058791c2dd4c1604ce1bd9ec26d490ae5d2ad86d3991b.gif?mw=700" alt="OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif" /></a><br /> 「 Excel で ちゃちゃっと作って CSV 吐いたら?」</p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 Python3 で どんなデータ形式がサポートされているのか 調べてみよ……☆」</p> <p><a target="_blank" rel="nofollow noopener" href="http://peaceandhilightandpython.hatenablog.com/entry/2017/07/23/134117">Python3の基礎 ファイル(CSV)を読み込む編 Python3 Python CSV</a></p> <pre><code>import csv import os # Settings of attribute. participant_list = [] with open("{}\\event-placement-ai\\data\\test-participant.csv".format(os.getcwd()), newline='') as f: dataReader = csv.reader(f) for row in dataReader: participant_list.append(row) # print(row) for i in range(0, len(participant_list)): print(participant_list[i]) </code></pre> <pre><code>['1', 'Red'] ['2', 'Red'] ['3', 'Blue'] ['4', 'Blue'] ['5', 'Green'] ['6', 'Blue'] # 以下略 </code></pre> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 仕様がない CSVが 標準サポートされてるんだな☆」</p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 ジャンルごとの参加者数を集計しようぜ☆」</p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 pandas とかいうデータ分析用のライブラリがあるみたいだが 利用者数はどれぐらいだろうか☆?」</p> <p><a target="_blank" rel="nofollow noopener" href="https://deepage.net/features/pandas-install.html">3分でできるPandasのインストール方法</a></p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 Visual studio code の Terminal ペーンに pip コマンドを使って簡単にインストールでけた☆」</p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 じゃあ Pandas の使い方を練習するかだぜ☆」</p> <p><a href="https://crieit.net/posts/pandas">pandas って何なんだぜ☆(^~^)?</a></p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 練習終わり☆」</p> <pre><code>id_list: [1, 2, 7, 12, 21, 37, 41, 52, 3, 4, 6, 8, 15, 17, 22, 27, 30, 33, 40, 50, 56, 60, 5, 9, 10, 14, 29, 36, 42, 44, 53, 57, 11, 13, 55, 16, 18, 20, 26, 31, 43, 51, 58, 19, 23, 24, 46, 25, 39, 48, 59, 28, 34, 32, 38, 54, 35, 49, 45, 47] A island. [ 1][ 2][ 7][ 12][ 21][ 37][ 41][ 52][ 3][ 4][ 6][ 8][ 15][ 17][ 22][ 27][ 30][ 33] B island. [ 40][ 50][ 56][ 60] C island. [ 5][ 9][ 10][ 14][ 29][ 36][ 42][ 44][ 53][ 57][ 11][ 13][ 55][ 16] D island. [ 18][ 20][ 26][ 31][ 43] [ 51][ 58][ 19][ 23][ 24] E island. [ 46][ 25][ 39][ 48] [ 59][ 28][ 34][ 32] F island. [ 38][ 54][ 35] [ 49][ 45][ 47] Info : Finished. </code></pre> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 ただ、ジャンルコード順に 島に並べても 島と島は 配置は 飛んでたりするから<br /> また今度 見直そうぜ☆」</p> <p><a href="https://crieit.now.sh/upload_images/058791c2dd4c1604ce1bd9ec26d490ae5d2ad86d3991b.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/058791c2dd4c1604ce1bd9ec26d490ae5d2ad86d3991b.gif?mw=700" alt="OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif" /></a><br /> 「 視覚的に 確認できないのかしら?」</p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 HTML/CSS と連動できないか試してみようぜ☆?<br /> Python3 で テキストファイル作成ぐらいできるだろ☆?」</p> <p><a href="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif?mw=700" alt="KIFUWARABE_80x100x8_01_Futu.gif" /></a><br /> 「 練習しようぜ☆?」</p> <h2 id="続き"><a href="#%E7%B6%9A%E3%81%8D">続き</a></h2> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 京都の火災ニュースで 記憶が飛んでしまったが、練習したぜ☆ おさらいしよう☆」</p> <p><a href="https://crieit.now.sh/upload_images/fab86bc86a9a114ac2d85bc0db72ae305d30651718b12.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/fab86bc86a9a114ac2d85bc0db72ae305d30651718b12.png?mw=700" alt="20190715math42a1.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 HTML/CSS を利用して、ジャンルコードの代わりに色で 多いもの順に四角を表示するところはできた☆<br /> このプログラムには html-generator という名前を付けた☆」</p> <p><a target="_blank" rel="nofollow noopener" href="https://github.com/muzudho/html-generator">html-generator</a></p> <p><a href="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif?mw=700" alt="KIFUWARABE_80x100x8_01_Futu.gif" /></a><br /> 「 説明の気が抜けていて 言っていることが よく分からん☆」</p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 タテ1列に並んでいても あんまりなので、机の配置のように並べたいのだった☆」</p> <p><a href="https://crieit.now.sh/upload_images/058791c2dd4c1604ce1bd9ec26d490ae5d2ad86d3991b.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/058791c2dd4c1604ce1bd9ec26d490ae5d2ad86d3991b.gif?mw=700" alt="OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif" /></a><br /> 「 平常心とか言ってる人は 平常心じゃないのよ?」</p> <pre><code>CCCCC..BBBB..AAAAAAA C..................A C.FFF..EEEE..DDDDD.A C.FFF..EEEE..DDDDD.A C..................A CCCCC........AAAAAAA </code></pre> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 次に 机の配置を Rogueのように表記して☆」</p> <pre><code>X,Y,CHAR 0,0,C 1,0,C 2,0,C 3,0,C 4,0,C 5,0,. 6,0,. 7,0,B 8,0,B 9,0,B 10,0,B 11,0,. 12,0,. 13,0,A 14,0,A 15,0,A 16,0,A 17,0,A 18,0,A 19,0,A 0,1,C 1,1,. </code></pre> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 CSV形式にコンバートする部品も作った☆<br /> 名前は ascii-floor-map-to-csv にした☆」</p> <p><a target="_blank" rel="nofollow noopener" href="https://github.com/muzudho/ascii-based-floor-map-to-csv">ascii-based-floor-map-to-csv</a></p> <p><a href="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif?mw=700" alt="KIFUWARABE_80x100x8_01_Futu.gif" /></a><br /> 「 お父んが ふわふわ している☆ 水でも飲めだぜ☆」</p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 この CSV をもとに、表示位置を生成するように html-generator を改造しようぜ☆?」</p> <p><a href="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif?mw=700" alt="KIFUWARABE_80x100x8_01_Futu.gif" /></a><br /> 「 日本語をしゃべっているようで お父んが ぼーっ としている☆!<br /> 習慣だけで PCに向かって プログラムを書いているだけだぜ☆!」</p> <h2 id="日曜日"><a href="#%E6%97%A5%E6%9B%9C%E6%97%A5">日曜日</a></h2> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 寝込んでいるだけで 進捗がない……☆」</p> <p><a href="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif?mw=700" alt="KIFUWARABE_80x100x8_01_Futu.gif" /></a><br /> 「 進捗なんか なくてもいいのに……☆」</p> <p><a href="https://crieit.now.sh/upload_images/5b5c04854085899278a216ab886e5d975d333f2299c2e.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5b5c04854085899278a216ab886e5d975d333f2299c2e.png?mw=700" alt="20190721blog47a1.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 <code>ascii-floor-map-to-csv</code> と <code>html-generator</code> を組み合わせて テーブルに色を塗るところまでは でけたぜ☆」</p> <p><a href="https://crieit.now.sh/upload_images/058791c2dd4c1604ce1bd9ec26d490ae5d2ad86d3991b.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/058791c2dd4c1604ce1bd9ec26d490ae5d2ad86d3991b.gif?mw=700" alt="OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif" /></a><br /> 「 参加者IDと、テーブルID を紐づけるだけで この図ができるような<br /> 使い勝手にしましょう」</p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 参加者IDと テーブルIDが紐づいていたら 参加者ID順にテーブルのIDの先頭から座っていくことになってしまう☆」</p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 Mapping という名前の別テーブルを作って、Participants列と、Table列を用意するかだぜ☆」</p> <pre><code>Participant,Table 1,1 2,2 3,3 4,4 5,5 </code></pre> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 昨日買ってきた Excel360 だかなんだかいうスプレッドシートで作成して CSV出力☆」</p> <pre><code>import pandas as pd from attribute.query_id_sorted_table import query_id_sorted_table # # Note. # # Root directory: Visual studio code workspace root. # # Output. output_css = "./html-generator/auto-generated/participants.css" # Floor map: Csv -&gt; Data frame. (Not record set) fl_df = pd.read_csv("./html-generator/data/floor-map.csv", sep=',', engine='python') # print(fl_df.values.tolist()) """ ID,X,Y,BLOCK 27,0,0,C 26,1,0,C 25,2,0,C """ # Participants pa_df = query_id_sorted_table("./html-generator/data/participant.csv") """ ID,GENRE_CODE 1,Red 2,Red 3,Blue print(pa_df.values.tolist()) [[30, 'Blue'], [6, 'Blue'], [56, 'Blue'], [50, 'Blue'], [40, 'Blue'], [33, 'Blue'], [27, 'Blue'], [22, 'Blue'], [17, 'Blue'], [15, 'Blue'], [8, 'Blue'], [4, 'Blue'], [3, 'Blue'], [60, 'Blue'], [5, 'Green'], [10, 'Green'], [14, 'Green'], [9, 'Green'], [29, 'Green'], [36, 'Green'], [42, 'Green'], [44, 'Green'], [53, 'Green'], [57, 'Green'], [16, 'Yellow'], [20, 'Yellow'], [26, 'Yellow'], [31, 'Yellow'], [43, 'Yellow'], [51, 'Yellow'], [58, 'Yellow'], [18, 'Yellow'], [1, 'Red'], [7, 'Red'], [2, 'Red'], [52, 'Red'], [41, 'Red'], [37, 'Red'], [21, 'Red'], [12, 'Red'], [59, 'White'], [48, 'White'], [39, 'White'], [25, 'White'], [54, 'Orange'], [46, 'Black'], [24, 'Black'], [23, 'Black'], [32, 'Orange'], [38, 'Orange'], [35, 'Gray'], [49, 'Gray'], [13, 'Violet'], [34, 'Pink'], [28, 'Pink'], [55, 'Violet'], [19, 'SkyBlue'], [11, 'Purple'], [45, 'YellowGreen'], [47, 'Brown']] """ # Mappings ma_df = pd.read_csv("./html-generator/data/mappings.csv", sep=',', engine='python') """ ID,GENRE_CODE 1,Red 2,Red 3,Blue """ # Join1 new_df = pa_df.merge(ma_df, left_on='ID', right_on='PARTICIPANT') # print(new_df.head(50)) """ ID GENRE_CODE PARTICIPANT TABLE 0 30 Blue 30 30 1 6 Blue 6 6 2 56 Blue 56 56 """ # Join2 new2_df = new_df.merge(fl_df, left_on='TABLE', right_on='ID') # print(new2_df.head(50)) """ ID_x GENRE_CODE PARTICIPANT TABLE ID_y X Y BLOCK 0 30 Blue 30 30 30 0 3 C 1 6 Blue 6 6 6 18 5 A 2 56 Blue 56 56 56 3 2 F """ def write(): try: file = open(output_css, 'w', encoding='utf-8') file.write( """ {} """.format(get_boxes()) ) except Exception as e: print(e) finally: file.close() def get_boxes(): html = [] for _index, new2_row in new2_df.iterrows(): # Participant id. id = new2_row["PARTICIPANT"] # print(" id : {}".format(id)) # print("type(id): {}".format(type(id))) x = new2_row["X"] y = new2_row["Y"] width = 16 height = 16 html.append( """ #box{} <span>{</span><span>{</span> position: absolute; left : {: >4}px; top : {: >4}px; width : {: >4}px; height : {: >4}px; background-color: {}; <span>}</span><span>}</span> """.format( id, x * width, y * height, width, height, new2_row["GENRE_CODE"]) ) return "".join(html) write() </code></pre> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 頭が回らないので 洗練させずに だらだら書くが、<br /> ジョインして CSV出力☆」</p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 これで Mapping.csv さえ書いてくれれば HTML/CSV 表示するぜ☆」</p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 とりあえず 参加者の数と、机の数は 同じものとしてくれだぜ☆」</p> <p><a href="https://crieit.now.sh/upload_images/058791c2dd4c1604ce1bd9ec26d490ae5d2ad86d3991b.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/058791c2dd4c1604ce1bd9ec26d490ae5d2ad86d3991b.gif?mw=700" alt="OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif" /></a><br /> 「 テストしましょう。 シャッフルして表示してみてちょうだい」</p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 participant.csv のID列のリストを作ってシャッフル、<br /> floor-map.csv のID列のリストを作ってシャッフル するかだぜ☆」</p> <p>participant.csv</p> <pre><code>ID,GENRE_CODE 1,Red 2,Red 3,Blue </code></pre> <p>floor-map.csv</p> <pre><code>ID,X,Y,BLOCK 27,0,0,C 26,1,0,C 25,2,0,C </code></pre> <p>go_campaign_map1-ver2.py</p> <pre><code>import random import pandas as pd """ Note. Root directory: Visual studio code workspace root. Participants ------------ ID,GENRE_CODE 1,Red 2,Red 3,Blue """ # Output. output_mappings = "./event-placement-ai/auto-generated/mappings.csv" # Participants: Csv -&gt; Data frame. (Not record set) pd_df = pd.read_csv("./event-placement-ai/data/participant.csv", sep=',', engine='python') pd_list = pd_df["ID"].values.tolist() random.shuffle(pd_list) print("pd_list: {}".format(pd_list)) # Floor map: Csv -&gt; Data frame. (Not record set) fl_df = pd.read_csv("./event-placement-ai/data/floor-map.csv", sep=',', engine='python') fl_list = fl_df["ID"].values.tolist() random.shuffle(fl_list) print("fl_list: {}".format(fl_list)) try: file = open(output_mappings, 'w', encoding='utf-8') file.write("PARTICIPANT,TABLE\n") for i in range(len(pd_list)): file.write( "{},{}\n".format(pd_list[i], fl_list[i]) ) except Exception as e: print(e) finally: file.close() print("Info : Finished.") </code></pre> <p>mappings.csv</p> <pre><code>PARTICIPANT,TABLE 57,25 38,26 6,8 13,32 60,7 49,23 32,60 25,37 10,10 37,42 40,29 11,44 26,17 24,39 12,24 46,40 22,41 17,18 7,28 9,36 28,45 19,54 59,35 51,33 56,11 8,12 18,53 4,48 2,46 31,15 27,43 52,2 21,13 53,38 35,57 33,31 43,50 47,47 16,22 42,1 20,5 29,56 54,52 3,51 5,14 44,30 36,34 45,6 58,58 50,4 30,20 23,27 34,19 41,49 55,21 14,3 48,9 1,59 39,55 15,16 </code></pre> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 シャッフルするプログラムをまず作って……☆」</p> <p><a href="https://crieit.now.sh/upload_images/cbb0f7e7830c850c7656df1e6c42da915d3364a0255e1.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/cbb0f7e7830c850c7656df1e6c42da915d3364a0255e1.png?mw=700" alt="20190721blog47a2.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 HTMLジェネレーターにかければ シャッフルされてるぜ☆」</p> <p><a href="https://crieit.now.sh/upload_images/058791c2dd4c1604ce1bd9ec26d490ae5d2ad86d3991b.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/058791c2dd4c1604ce1bd9ec26d490ae5d2ad86d3991b.gif?mw=700" alt="OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif" /></a><br /> 「 あとは 色が隣接しているときに 報酬を与えて、<br /> シャッフルしながら 利益が1番高いものを選べばいいのよ」</p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 なるほど☆」</p> <p>entry_list.py</p> <pre><code>import random import pandas as pd """ Note. Root directory: Visual studio code workspace root. """ def read_entry_lists(): """ From: Participant.csv --------------------- ID,GENRE_CODE 1,Red 2,Red 3,Blue """ pd_df = pd.read_csv("./event-placement-ai/data/participant.csv", sep=',', engine='python') pd_list = pd_df["ID"].values.tolist() """ From: floor-map.csv ------------------- """ fl_df = pd.read_csv("./event-placement-ai/auto-generated/floor-map.csv", sep=',', engine='python') fl_list = fl_df["ID"].values.tolist() return pd_list, fl_list </code></pre> <pre><code>from my_lib.entry_list import read_entry_lists pd_list, fl_list = read_entry_lists() ```` ![KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif) 「 参加者IDのリストと、テーブルIDのリストは read_entry_lists() 一発で取れるようにしておこう☆」 shuffuling.py </code></pre> <p>import random</p> <p>"""<br /> Note.<br /> Root directory: Visual studio code workspace root.<br /> """</p> <p>def go_shuffule(pd_list, fl_list):<br /> random.shuffle(pd_list)<br /> # print("pd_list: {}".format(pd_list))</p> <pre><code>random.shuffle(fl_list) # print("fl_list: {}".format(fl_list)) """ Make: mappings.csv ------------------ PARTICIPANT,TABLE 57,25 38,26 6,8 """ try: output_mappings = "./event-placement-ai/html_generator/auto-generated/mappings.csv" file = open(output_mappings, 'w', encoding='utf-8') file.write("PARTICIPANT,TABLE\n") for i in range(len(pd_list)): file.write( "{},{}\n".format(pd_list[i], fl_list[i]) ) except Exception as e: print(e) finally: file.close() </code></pre> <pre><code><br />![KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif) 「 リストをシャッフルして mappings.csv ファイルを作成するまでを1連の処理にするぜ☆」 </code></pre> <p>from html_generator.go_css import new_csv<br /> from my_lib.entry_list import read_entry_lists<br /> from my_lib.shuffuling import go_shuffule</p> <p>pd_list, fl_list = read_entry_lists()<br /> go_shuffule(pd_list, fl_list)<br /> new_csv()<br /> print("Info : Finished.")</p> <pre><code><br />![KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif) 「 プログラムのメイン・ルーチンは こんな感じ☆」 ![OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif](https://crieit.now.sh/upload_images/058791c2dd4c1604ce1bd9ec26d490ae5d2ad86d3991b.gif) 「 毎回 CSVを出力していると重いから、 とりあえず CSV出力無しで 評価を出すのを ループで10回やってみましょう!」 ![KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif) 「 CSVを作る前に X、Y の位置関係を 2次元のテーブルにしたいよな☆」 position.py </code></pre> <p>import pandas as pd</p> <p>"""<br /> Note.<br /> Root directory: Visual studio code workspace root.<br /> """</p> <p>def new_position():<br /> """<br /> Create position.<br /> """</p> <pre><code># Output. output_position = "./event-placement-ai/auto-generated/position.csv" """ Input: floor-map.csv -------------------- ID,X,Y,BLOCK 27,0,0,C 26,1,0,C 25,2,0,C """ fl_df = pd.read_csv("./event-placement-ai/auto-generated/floor-map.csv", sep=',', engine='python') """ Input: participants.csv ----------------------- ID,GENRE_CODE 1,Red 2,Red 3,Blue """ pa_df = pd.read_csv( "./event-placement-ai/html_generator/input/participant.csv") """ Auto-generated: Mappings ------------------------ ID,GENRE_CODE 1,Red 2,Red 3,Blue """ ma_df = pd.read_csv("./event-placement-ai/html_generator/auto-generated/mappings.csv", sep=',', engine='python') """ New-table: new_df ----------------- Join. print(new_df.head(3)) ID GENRE_CODE PARTICIPANT TABLE 0 30 Blue 30 30 1 6 Blue 6 6 2 56 Blue 56 56 """ new_df = pa_df.merge(ma_df, left_on='ID', right_on='PARTICIPANT') new_df = new_df.drop("ID", axis=1) """ New-table: new2_df ------------------ print(new2_df.head(3)) GENRE_CODE PARTICIPANT TABLE ID X Y BLOCK 0 Blue 30 30 30 0 3 C 1 Blue 6 6 6 18 5 A 2 Blue 56 56 56 3 2 F """ new2_df = new_df.merge(fl_df, left_on='TABLE', right_on='ID') new2_df = new2_df.drop("ID", axis=1) """ output ------ </code></pre> <p>GENRE_CODE,PARTICIPANT,TABLE,X,Y,BLOCK<br /> Red,1,31,0,4,C<br /> Red,2,25,2,0,C<br /> Blue,3,8,19,4,A<br /> """<br /> new2_df.to_csv(output_position, index=False)</p> <pre><code>new2_df </code></pre> <pre><code><br />position.csv </code></pre> <p>GENRE_CODE,PARTICIPANT,TABLE,X,Y,BLOCK<br /> Red,1,31,0,4,C<br /> Red,2,25,2,0,C<br /> Blue,3,8,19,4,A</p> <pre><code><br />![KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif) 「 これだけの情報が取得できれば十分だろう……☆」 go_css.py </code></pre> <p>import pandas as pd</p> <p>"""<br /> Note.<br /> Root directory: Visual studio code workspace root.<br /> """</p> <p>def new_csv(pos_df):<br /> """<br /> Create csv.<br /> """</p> <pre><code># Output. output_css = "./event-placement-ai/html_generator/auto-generated/table-color.css" def write(): try: file = open(output_css, 'w', encoding='utf-8') file.write( """ {} """.format(get_boxes()) ) except Exception as e: print(e) finally: file.close() def get_boxes(): html = [] for _index, row in pos_df.iterrows(): # Participant id. id = row["PARTICIPANT"] # print(" id : {}".format(id)) # print("type(id): {}".format(type(id))) x = row["X"] y = row["Y"] width = 16 height = 16 html.append( """ #box{} <span>{</span><span>{</span> position: absolute; left : {: >4}px; top : {: >4}px; width : {: >4}px; height : {: >4}px; background-color: {}; <span>}</span><span>}</span> """.format( id, x * width, y * height, width, height, row["GENRE_CODE"]) ) return "".join(html) write() </code></pre> <pre><code><br />![KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif](https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif) 「 CSS書き出しは簡単になるから……☆」 go_campaign_map1-ver2.py </code></pre> <p>from html_generator.go_css import new_csv<br /> from my_lib.entry_list import read_entry_lists<br /> from my_lib.shuffuling import go_shuffule<br /> from my_lib.position import new_position</p> <p>pd_list, fl_list = read_entry_lists()<br /> go_shuffule(pd_list, fl_list)<br /> pos_df = new_position()<br /> new_csv(pos_df)<br /> print("Info : Finished.")<br /> ```</p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 メイン・プログラムで 局面(position)を取れるようになった☆<br /> この局面を元に 評価すればいい☆」</p> <p><a href="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5ac9fa3b390b658160717a7c1ef5008a5d2ad81f1a4c2.gif?mw=700" alt="KIFUWARABE_80x100x8_01_Futu.gif" /></a><br /> 「 コンピューター将棋に 似せてしまえば パターンに入るな☆」</p> <p><a href="https://crieit.now.sh/upload_images/409fda35ce2901ab5c3e5b5f2c2a3cd65d34395d39db3.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/409fda35ce2901ab5c3e5b5f2c2a3cd65d34395d39db3.png?mw=700" alt="20190721blog48a1.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 しかし出力結果がこんなんでは、<br /> また 手で 打ち直すのがめんどうだな……☆」</p> <p><a href="https://crieit.now.sh/upload_images/f5630c22f469b4f18aab8c910ad37e845d343bded2ea7.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/f5630c22f469b4f18aab8c910ad37e845d343bded2ea7.png?mw=700" alt="20190721blog48a2.png" /></a></p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 CSVで、ここまで出力して、あとは 任せるかだぜ☆」</p> <p><a href="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3da2d4690cf2c3f101c5cbc0e48729f55d2ad80297e17.gif?mw=700" alt="KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif" /></a><br /> 「 記事を変えよう☆」</p> <p><書きかけ></p> むずでょ