From 527a122e893bed440d06f1f7d9b3fb7907d8e023 Mon Sep 17 00:00:00 2001 From: wanotaitei Date: Wed, 30 Oct 2024 20:06:11 +0900 Subject: [PATCH] fix: simulation results --- Data/Simulations/Sample/District.tsv | 180 +++++++++--------- Library/PAX_MAHOROBA/LocationPoint.hpp | 38 +++- .../PAX_SAPIENTICA/Simulation/Settlement.hpp | 22 ++- .../Simulation/SettlementSimulator.hpp | 87 +++++++-- Library/PAX_SAPIENTICA/Version.hpp | 28 ++- 5 files changed, 228 insertions(+), 127 deletions(-) diff --git a/Data/Simulations/Sample/District.tsv b/Data/Simulations/Sample/District.tsv index 751376832..815228bf1 100644 --- a/Data/Simulations/Sample/District.tsv +++ b/Data/Simulations/Sample/District.tsv @@ -1,91 +1,91 @@ id name ja-JP region min_pop_placed_per_cell max_pop_placed_per_cell init_pop immigrant increased_immigration mtdna_region pop_ad725 directions direction_min_distance language hunter_gatherer farming snp -1 satsuma 薩摩 2 4 20 220 0 0 kyushu_jomon 38400 1/1/2/4/4/2/4/1 160 255 255 0 0 -2 osumi 大隅 2 4 20 220 0 0 kyushu_jomon 40600 1/2/2/2/4/2/2/2 160 255 255 0 0 -3 hyuga 日向 2 4 20 220 0 0 kyushu_jomon 30800 10/4/1/1/1/1/1/1 160 255 255 0 0 -4 higo 肥後 2 4 20 2400 0 0 kyushu_jomon 108700 10/4/1/1/1/1/1/4 160 255 255 0 0 -5 bungo 豊後 3 4 20 340 0 0 kyushu_jomon 51600 10/4/1/1/1/1/1/2 160 255 255 0 0 -6 chikugo 筑後 3 4 20 480 0 0 kyushu_jomon 59300 10/10/1/2/2/1/1/2 160 255 255 0 0 -7 hizen 肥前 3 4 20 1210 0 0 kyushu_jomon 48300 4/4/4/4/1/1/1/1 160 255 255 0 0 -8 chikuzen 筑前 3 4 20 480 5 0 kyushu_jomon 112000 4/4/1/1/1/1/4/10 160 255 255 0 0 -9 buzen 豊前 3 4 20 420 0 0 kyushu_jomon 47200 10/2/1/1/1/1/1/2 160 255 255 0 0 -10 iki 壱岐 3 4 20 80 0 0 kyushu_jomon 12100 4/4/1/1/2/1/1/1 160 255 255 0 0 -11 tsushima 対馬 3 4 20 80 0 0 kyushu_jomon 9900 1/1/1/4/4/1/1/1 160 255 255 0 0 -12 nagato 長門 5 4 20 50 0 0 chugoku_jomon 43900 2/2/1/1/1/2/10/10 160 255 255 0 0 -13 suo 周防 5 4 20 50 0 0 chugoku_jomon 49400 1/1/2/1/1/2/10/10 160 255 255 0 0 -14 aki 安芸 5 4 20 190 0 0 chugoku_jomon 69200 1/1/1/2/1/4/10/10 160 255 255 0 0 -15 bingo 備後 5 4 20 190 0 0 chugoku_jomon 71400 1/1/1/1/1/2/10/4 160 255 255 0 0 -16 bitchu 備中 5 4 20 200 0 0 chugoku_jomon 79100 1/1/1/1/1/2/10/4 160 255 255 0 0 -17 mimasaka 美作 5 4 20 200 0 0 chugoku_jomon 70300 2/2/1/2/2/2/1/2 160 255 255 0 0 -18 bizen 備前 5 4 20 180 0 0 chugoku_jomon 56000 2/1/1/1/4/4/10/4 160 255 255 0 0 -19 harima 播磨 7 4 20 70 0 0 kinki_jomon 107600 1/1/2/2/2/10/10/4 160 255 255 0 0 -20 iwami 石見 6 4 20 410 0 0 chugoku_jomon 40600 2/2/1/2/1/1/10/10 160 255 255 0 0 -21 izumo 出雲 6 4 20 410 0 0 chugoku_jomon 85700 4/2/2/2/1/1/10/10 160 255 255 0 0 -22 hoki 伯耆 6 4 20 50 0 0 chugoku_jomon 52700 2/2/2/1/1/2/10/10 160 255 255 0 0 -23 oki 隠岐 6 4 20 110 0 0 chugoku_jomon 13200 1/1/1/1/10/1/1/1 160 255 255 0 0 -24 inaba 因幡 6 4 20 50 0 0 chugoku_jomon 54900 2/2/4/2/1/1/10/10 160 255 255 0 0 -25 tajima 但馬 6 4 20 70 0 0 chugoku_jomon 64800 2/2/2/1/1/4/10/10 160 255 255 0 0 -26 tango 丹後 6 4 20 60 0 0 chugoku_jomon 38400 2/2/2/2/2/4/10/4 160 255 255 0 0 -27 tanba 丹波 7 4 20 60 0 0 kinki_jomon 74700 2/2/2/2/2/10/4/4 160 255 255 0 0 -28 iyo 伊予 4 4 20 370 0 0 shikoku_jomon 79100 4/2/1/1/1/1/4/10 160 255 255 0 0 -29 tosa 土佐 4 4 20 50 0 0 shikoku_jomon 47200 4/4/1/1/1/1/2/4 160 255 255 0 0 -30 awa 阿波 4 4 20 50 0 0 shikoku_jomon 50500 2/2/1/1/1/1/4/4 160 255 255 0 0 -31 sanuki 讃岐 4 4 20 50 0 0 shikoku_jomon 98800 10/10/2/4/4/4/2/10 160 255 255 0 0 -32 awaji 淡路 7 4 20 70 0 0 kinki_jomon 18700 4/2/2/2/1/2/10/10 160 255 255 0 0 -33 kii 紀伊 7 4 20 440 0 0 kinki_jomon 61500 2/2/2/10/4/4/2/2 160 255 255 0 0 -34 yamato 大和 8 4 20 610 0 0 kinki_jomon 171700 2/2/1/1/1/1/1/2 160 255 255 0 0 -35 kawachi 河内 8 4 20 60 0 0 kinki_jomon 87900 1/1/1/1/1/1/2/1 160 255 255 0 0 -36 yamashiro 山城 8 4 20 60 0 0 kinki_jomon 85700 1/1/1/1/2/2/2/1 160 255 255 0 0 -37 izumi 和泉 8 4 20 60 0 0 kinki_jomon 26400 2/1/1/1/1/1/2/2 160 255 255 0 0 -38 settsu 摂津 8 4 20 60 0 0 kinki_jomon 85700 1/2/1/1/2/4/10/4 160 255 255 0 0 -39 wakasa 若狭 11 4 20 40 0 0 chubu_jomon 23100 2/1/2/1/1/2/4/10 160 255 255 0 0 -40 echizen 越前 11 4 20 40 0 0 chubu_jomon 60400 10/2/1/2/1/1/2/10 160 255 255 0 0 -41 kaga 加賀 11 4 20 270 0 0 chubu_jomon 32900 10/2/1/1/1/1/2/10 160 255 255 0 0 -42 etchu 越中 11 4 20 860 0 0 chubu_jomon 46100 2/4/2/2/2/1/4/10 160 255 255 0 0 -43 noto 能登 11 4 20 270 0 0 chubu_jomon 28600 1/1/1/1/4/4/10/4 160 255 255 0 0 -44 echigo 越後 11 4 20 3290 0 0 chubu_jomon 37300 4/2/2/4/4/4/1/4 160 255 255 0 0 -45 sado 佐渡 11 4 20 470 0 0 chubu_jomon 24200 1/1/1/4/4/4/4/4 160 255 255 0 0 -46 shima 志摩 7 4 20 150 0 0 kinki_jomon 154000 4/2/2/2/1/1/1/4 160 255 255 0 0 -47 ise 伊勢 7 4 20 150 0 0 kinki_jomon 103200 2/2/2/2/1/1/4/10 160 255 255 0 0 -48 iga 伊賀 7 4 20 150 0 0 kinki_jomon 19800 1/1/1/1/1/1/1/4 160 255 255 0 0 -49 owari 尾張 9 4 20 2510 0 0 chubu_jomon 75800 2/2/1/2/1/4/10/2 160 255 255 0 0 -50 mikawa 参河 9 4 20 2510 0 0 chubu_jomon 75800 2/2/2/1/1/4/10/4 160 255 255 0 0 -51 totomi 遠江 9 4 20 570 0 0 chubu_jomon 105400 1/4/2/1/1/2/4/10 160 255 255 0 0 -52 suruga 駿河 9 4 20 570 0 0 chubu_jomon 64800 4/1/1/4/2/4/4/10 160 255 255 0 0 -53 izu 伊豆 9 4 20 560 0 0 chubu_jomon 23100 4/2/2/1/1/1/1/10 160 255 255 0 0 -54 kai 甲斐 10 4 20 440 0 0 chubu_jomon 34000 2/4/2/2/2/2/2/2 160 255 255 0 0 -55 sagami 相模 12 4 20 280 0 0 kanto_jomon 73600 4/4/2/2/1/2/4/10 160 255 255 0 0 -56 musashi 武蔵 12 4 20 2650 0 0 kanto_jomon 130700 4/10/2/2/2/4/4/4 160 255 255 0 0 -57 shimosa 下総 12 4 20 690 0 0 kanto_jomon 99900 4/4/4/2/2/1/1/2 160 255 255 0 0 -58 kazusa 上総 12 4 20 270 0 0 kanto_jomon 83500 2/4/4/2/2/1/1/1 160 255 255 0 0 -59 awa1 安房 12 4 20 270 0 0 kanto_jomon 35100 4/10/2/1/1/1/1/2 160 255 255 0 0 -60 hitachi 常陸 13 4 20 1220 0 0 kanto_jomon 168000 4/10/2/2/2/2/2/2 160 255 255 0 0 -61 omi 近江 7 4 20 150 0 0 kinki_jomon 102100 2/2/2/2/4/4/10/2 160 255 255 0 0 -62 mino 美濃 9 4 20 1360 0 0 chubu_jomon 143900 4/10/2/2/4/10/2/2 160 255 255 0 0 -63 hida 飛騨 10 4 20 1360 0 0 chubu_jomon 14300 4/4/2/2/2/2/2/4 160 255 255 0 0 -64 shinano 信濃 10 4 20 2910 0 0 chubu_jomon 73600 1/1/1/1/1/1/1/1 160 255 255 0 0 -65 kozuke 上野 13 4 20 710 0 0 kanto_jomon 112000 4/4/1/1/2/2/2/4 160 255 255 0 0 -66 shimotsuke 下野 13 4 20 1760 0 0 kanto_jomon 76900 4/4/2/2/2/4/2/4 160 255 255 0 0 -67 mutsu 陸奥 15 4 20 20812 0 0 tohoku_jomon 206500 2/2/4/4/10/2/2/4 160 0 255 0 0 -68 dewa 出羽 14 4 20 12190 0 0 tohoku_jomon 78000 2/2/2/2/10/4/4/2 160 0 255 0 0 -69 ezo_honshu 蝦夷(本州) 15 4 20 6938 0 0 tohoku_jomon 0 1/1/1/1/10/1/1/1 160 0 255 0 0 -70 ezo_hokkaido 蝦夷(北海道) 16 4 20 0 0 0 hokkaido_jomon 0 1/1/1/1/10/1/1/1 160 0 255 0 0 -71 ezo_chishima 蝦夷(千島列島) 16 4 20 0 0 0 hokkaido_jomon 0 1/1/1/1/1/1/1/1 160 0 255 0 0 -72 ezo_karafuto 蝦夷(樺太) 16 4 20 0 0 0 hokkaido_jomon 0 1/1/1/1/1/1/1/1 160 0 255 0 0 -73 toraijin_land 渡来人 0 0 0 0 0 0 toraijin 0 1/1/1/1/1/1/1/1 160 255 0 255 255 -74 null_a 0 4 20 0 0 0 0 1/1/1/1/1/1/1/1 160 255 255 0 0 -75 null_b 0 4 20 0 0 0 0 1/1/1/1/1/1/1/1 160 255 255 0 0 -76 null_c 0 4 20 0 0 0 0 1/1/1/1/1/1/1/1 160 255 255 0 0 -77 null_d 0 4 20 0 0 0 0 1/1/1/1/1/1/1/1 160 255 255 0 0 -78 null_e 0 4 20 0 0 0 0 1/1/1/1/1/1/1/1 160 255 255 0 0 -79 null_f 0 4 20 0 0 0 0 1/1/1/1/1/1/1/1 160 255 255 0 0 -80 null_g 0 4 20 0 0 0 0 1/1/1/1/1/1/1/1 160 255 255 0 0 -81 null_h 0 4 20 0 0 0 0 1/1/1/1/1/1/1/1 160 255 255 0 0 -82 null_i 0 4 20 0 0 0 0 1/1/1/1/1/1/1/1 160 255 255 0 0 -83 null_j 0 4 20 0 0 0 0 1/1/1/1/1/1/1/1 160 255 255 0 0 -84 null_k 0 4 20 0 0 0 0 1/1/1/1/1/1/1/1 160 255 255 0 0 -85 null_l 0 4 20 0 0 0 0 1/1/1/1/1/1/1/1 160 255 255 0 0 -86 null_m 0 4 20 0 0 0 0 1/1/1/1/1/1/1/1 160 255 255 0 0 -87 null_n 0 4 20 0 0 0 0 1/1/1/1/1/1/1/1 160 255 255 0 0 -88 ogasawara 小笠原諸島 1 4 20 0 0 0 southern_islands_jomon 0 1/1/1/1/1/1/1/1 160 255 255 0 0 -89 izu1 伊豆諸島 1 4 20 0 0 0 southern_islands_jomon 0 1/1/1/1/1/1/1/1 160 255 255 0 0 -90 ryukyu 琉球諸島 1 4 20 0 0 0 southern_islands_jomon 0 1/1/1/1/1/1/1/1 160 255 255 0 0 \ No newline at end of file +1 satsuma 薩摩 2 4 20 220 0 0 kyushu_jomon 38400 1/1/2/4/4/2/4/1 160 1 255 0 0 +2 osumi 大隅 2 4 20 220 0 0 kyushu_jomon 40600 1/2/2/2/4/2/2/2 160 1 255 0 0 +3 hyuga 日向 2 4 20 220 0 0 kyushu_jomon 30800 10/4/1/1/1/1/1/1 160 1 255 0 0 +4 higo 肥後 2 4 20 2400 0 0 kyushu_jomon 108700 10/4/1/1/1/1/1/4 160 1 255 0 0 +5 bungo 豊後 3 4 20 340 0 0 kyushu_jomon 51600 10/4/1/1/1/1/1/2 160 0 255 0 0 +6 chikugo 筑後 3 4 20 480 0 0 kyushu_jomon 59300 10/10/1/2/2/1/1/2 160 0 255 0 0 +7 hizen 肥前 3 4 20 1210 0 0 kyushu_jomon 48300 4/4/4/4/1/1/1/1 160 0 255 0 0 +8 chikuzen 筑前 3 4 20 480 5 0 kyushu_jomon 112000 4/4/1/1/1/1/4/10 160 0 255 0 0 +9 buzen 豊前 3 4 20 420 0 0 kyushu_jomon 47200 10/2/1/1/1/1/1/2 160 0 255 0 0 +10 iki 壱岐 3 4 20 80 0 0 kyushu_jomon 12100 4/4/1/1/2/1/1/1 160 0 255 0 0 +11 tsushima 対馬 3 4 20 80 0 0 kyushu_jomon 9900 1/1/1/4/4/1/1/1 160 0 255 0 0 +12 nagato 長門 5 4 20 50 0 0 chugoku_jomon 43900 2/2/1/1/1/2/10/10 160 0 255 0 0 +13 suo 周防 5 4 20 50 0 0 chugoku_jomon 49400 1/1/2/1/1/2/10/10 160 0 255 0 0 +14 aki 安芸 5 4 20 190 0 0 chugoku_jomon 69200 1/1/1/2/1/4/10/10 160 0 255 0 0 +15 bingo 備後 5 4 20 190 0 0 chugoku_jomon 71400 1/1/1/1/1/2/10/4 160 0 255 0 0 +16 bitchu 備中 5 4 20 200 0 0 chugoku_jomon 79100 1/1/1/1/1/2/10/4 160 0 255 0 0 +17 mimasaka 美作 5 4 20 200 0 0 chugoku_jomon 70300 2/2/1/2/2/2/1/2 160 0 255 0 0 +18 bizen 備前 5 4 20 180 0 0 chugoku_jomon 56000 2/1/1/1/4/4/10/4 160 0 255 0 0 +19 harima 播磨 7 4 20 70 0 0 kinki_jomon 107600 1/1/2/2/2/10/10/4 160 0 255 0 0 +20 iwami 石見 6 4 20 410 0 0 chugoku_jomon 40600 2/2/1/2/1/1/10/10 160 0 255 0 0 +21 izumo 出雲 6 4 20 410 0 0 chugoku_jomon 85700 4/2/2/2/1/1/10/10 160 0 255 0 0 +22 hoki 伯耆 6 4 20 50 0 0 chugoku_jomon 52700 2/2/2/1/1/2/10/10 160 0 255 0 0 +23 oki 隠岐 6 4 20 110 0 0 chugoku_jomon 13200 1/1/1/1/10/1/1/1 160 0 255 0 0 +24 inaba 因幡 6 4 20 50 0 0 chugoku_jomon 54900 2/2/4/2/1/1/10/10 160 0 255 0 0 +25 tajima 但馬 6 4 20 70 0 0 chugoku_jomon 64800 2/2/2/1/1/4/10/10 160 0 255 0 0 +26 tango 丹後 6 4 20 60 0 0 chugoku_jomon 38400 2/2/2/2/2/4/10/4 160 0 255 0 0 +27 tanba 丹波 7 4 20 60 0 0 kinki_jomon 74700 2/2/2/2/2/10/4/4 160 0 255 0 0 +28 iyo 伊予 4 4 20 370 0 0 shikoku_jomon 79100 4/2/1/1/1/1/4/10 160 0 255 0 0 +29 tosa 土佐 4 4 20 50 0 0 shikoku_jomon 47200 4/4/1/1/1/1/2/4 160 0 255 0 0 +30 awa 阿波 4 4 20 50 0 0 shikoku_jomon 50500 2/2/1/1/1/1/4/4 160 0 255 0 0 +31 sanuki 讃岐 4 4 20 50 0 0 shikoku_jomon 98800 10/10/2/4/4/4/2/10 160 0 255 0 0 +32 awaji 淡路 7 4 20 70 0 0 kinki_jomon 18700 4/2/2/2/1/2/10/10 160 0 255 0 0 +33 kii 紀伊 7 4 20 440 0 0 kinki_jomon 61500 2/2/2/10/4/4/2/2 160 0 255 0 0 +34 yamato 大和 8 4 20 610 0 0 kinki_jomon 171700 2/2/1/1/1/1/1/2 160 0 255 0 0 +35 kawachi 河内 8 4 20 60 0 0 kinki_jomon 87900 1/1/1/1/1/1/2/1 160 0 255 0 0 +36 yamashiro 山城 8 4 20 60 0 0 kinki_jomon 85700 1/1/1/1/2/2/2/1 160 0 255 0 0 +37 izumi 和泉 8 4 20 60 0 0 kinki_jomon 26400 2/1/1/1/1/1/2/2 160 0 255 0 0 +38 settsu 摂津 8 4 20 60 0 0 kinki_jomon 85700 1/2/1/1/2/4/10/4 160 0 255 0 0 +39 wakasa 若狭 11 4 20 40 0 0 chubu_jomon 23100 2/1/2/1/1/2/4/10 160 0 255 0 0 +40 echizen 越前 11 4 20 40 0 0 chubu_jomon 60400 10/2/1/2/1/1/2/10 160 0 255 0 0 +41 kaga 加賀 11 4 20 270 0 0 chubu_jomon 32900 10/2/1/1/1/1/2/10 160 0 255 0 0 +42 etchu 越中 11 4 20 860 0 0 chubu_jomon 46100 2/4/2/2/2/1/4/10 160 0 255 0 0 +43 noto 能登 11 4 20 270 0 0 chubu_jomon 28600 1/1/1/1/4/4/10/4 160 0 255 0 0 +44 echigo 越後 11 4 20 3290 0 0 chubu_jomon 37300 4/2/2/4/4/4/1/4 160 0 255 0 0 +45 sado 佐渡 11 4 20 470 0 0 chubu_jomon 24200 1/1/1/4/4/4/4/4 160 0 255 0 0 +46 shima 志摩 7 4 20 150 0 0 kinki_jomon 154000 4/2/2/2/1/1/1/4 160 0 255 0 0 +47 ise 伊勢 7 4 20 150 0 0 kinki_jomon 103200 2/2/2/2/1/1/4/10 160 0 255 0 0 +48 iga 伊賀 7 4 20 150 0 0 kinki_jomon 19800 1/1/1/1/1/1/1/4 160 0 255 0 0 +49 owari 尾張 9 4 20 2510 0 0 chubu_jomon 75800 2/2/1/2/1/4/10/2 160 0 255 0 0 +50 mikawa 参河 9 4 20 2510 0 0 chubu_jomon 75800 2/2/2/1/1/4/10/4 160 0 255 0 0 +51 totomi 遠江 9 4 20 570 0 0 chubu_jomon 105400 1/4/2/1/1/2/4/10 160 0 255 0 0 +52 suruga 駿河 9 4 20 570 0 0 chubu_jomon 64800 4/1/1/4/2/4/4/10 160 0 255 0 0 +53 izu 伊豆 9 4 20 560 0 0 chubu_jomon 23100 4/2/2/1/1/1/1/10 160 0 255 0 0 +54 kai 甲斐 10 4 20 440 0 0 chubu_jomon 34000 2/4/2/2/2/2/2/2 160 0 255 0 0 +55 sagami 相模 12 4 20 280 0 0 kanto_jomon 73600 4/4/2/2/1/2/4/10 160 0 255 0 0 +56 musashi 武蔵 12 4 20 2650 0 0 kanto_jomon 130700 4/10/2/2/2/4/4/4 160 0 255 0 0 +57 shimosa 下総 12 4 20 690 0 0 kanto_jomon 99900 4/4/4/2/2/1/1/2 160 0 255 0 0 +58 kazusa 上総 12 4 20 270 0 0 kanto_jomon 83500 2/4/4/2/2/1/1/1 160 0 255 0 0 +59 awa1 安房 12 4 20 270 0 0 kanto_jomon 35100 4/10/2/1/1/1/1/2 160 0 255 0 0 +60 hitachi 常陸 13 4 20 1220 0 0 kanto_jomon 168000 4/10/2/2/2/2/2/2 160 0 255 0 0 +61 omi 近江 7 4 20 150 0 0 kinki_jomon 102100 2/2/2/2/4/4/10/2 160 0 255 0 0 +62 mino 美濃 9 4 20 1360 0 0 chubu_jomon 143900 4/10/2/2/4/10/2/2 160 0 255 0 0 +63 hida 飛騨 10 4 20 1360 0 0 chubu_jomon 14300 4/4/2/2/2/2/2/4 160 0 255 0 0 +64 shinano 信濃 10 4 20 2910 0 0 chubu_jomon 73600 1/1/1/1/1/1/1/1 160 0 255 0 0 +65 kozuke 上野 13 4 20 710 0 0 kanto_jomon 112000 4/4/1/1/2/2/2/4 160 0 255 0 0 +66 shimotsuke 下野 13 4 20 1760 0 0 kanto_jomon 76900 4/4/2/2/2/4/2/4 160 0 255 0 0 +67 mutsu 陸奥 15 4 20 20812 0 0 tohoku_jomon 206500 2/2/4/4/10/2/2/4 160 2 255 0 0 +68 dewa 出羽 14 4 20 12190 0 0 tohoku_jomon 78000 2/2/2/2/10/4/4/2 160 2 255 0 0 +69 ezo_honshu 蝦夷(本州) 15 4 20 6938 0 0 tohoku_jomon 0 1/1/1/1/10/1/1/1 160 2 255 0 0 +70 ezo_hokkaido 蝦夷(北海道) 16 4 20 0 0 0 hokkaido_jomon 0 1/1/1/1/10/1/1/1 160 2 255 0 0 +71 ezo_chishima 蝦夷(千島列島) 16 4 20 0 0 0 hokkaido_jomon 0 1/1/1/1/1/1/1/1 160 2 255 0 0 +72 ezo_karafuto 蝦夷(樺太) 16 4 20 0 0 0 hokkaido_jomon 0 1/1/1/1/1/1/1/1 160 2 255 0 0 +73 toraijin_land 渡来人 0 0 0 0 0 0 toraijin 0 1/1/1/1/1/1/1/1 160 3 0 255 255 +74 null_a 0 4 20 0 0 0 0 1/1/1/1/1/1/1/1 160 0 255 0 0 +75 null_b 0 4 20 0 0 0 0 1/1/1/1/1/1/1/1 160 0 255 0 0 +76 null_c 0 4 20 0 0 0 0 1/1/1/1/1/1/1/1 160 0 255 0 0 +77 null_d 0 4 20 0 0 0 0 1/1/1/1/1/1/1/1 160 0 255 0 0 +78 null_e 0 4 20 0 0 0 0 1/1/1/1/1/1/1/1 160 0 255 0 0 +79 null_f 0 4 20 0 0 0 0 1/1/1/1/1/1/1/1 160 0 255 0 0 +80 null_g 0 4 20 0 0 0 0 1/1/1/1/1/1/1/1 160 0 255 0 0 +81 null_h 0 4 20 0 0 0 0 1/1/1/1/1/1/1/1 160 0 255 0 0 +82 null_i 0 4 20 0 0 0 0 1/1/1/1/1/1/1/1 160 0 255 0 0 +83 null_j 0 4 20 0 0 0 0 1/1/1/1/1/1/1/1 160 0 255 0 0 +84 null_k 0 4 20 0 0 0 0 1/1/1/1/1/1/1/1 160 0 255 0 0 +85 null_l 0 4 20 0 0 0 0 1/1/1/1/1/1/1/1 160 0 255 0 0 +86 null_m 0 4 20 0 0 0 0 1/1/1/1/1/1/1/1 160 0 255 0 0 +87 null_n 0 4 20 0 0 0 0 1/1/1/1/1/1/1/1 160 0 255 0 0 +88 ogasawara 小笠原諸島 1 4 20 0 0 0 southern_islands_jomon 0 1/1/1/1/1/1/1/1 160 0 255 0 0 +89 izu1 伊豆諸島 1 4 20 0 0 0 southern_islands_jomon 0 1/1/1/1/1/1/1/1 160 0 255 0 0 +90 ryukyu 琉球諸島 1 4 20 0 0 0 southern_islands_jomon 0 1/1/1/1/1/1/1/1 160 1 255 0 0 \ No newline at end of file diff --git a/Library/PAX_MAHOROBA/LocationPoint.hpp b/Library/PAX_MAHOROBA/LocationPoint.hpp index 2215c56be..1afdba5fc 100644 --- a/Library/PAX_MAHOROBA/LocationPoint.hpp +++ b/Library/PAX_MAHOROBA/LocationPoint.hpp @@ -581,7 +581,7 @@ namespace paxs { // 色付き switch (pop_) { - case 0: return paxg::Color(45, 87, 154); + case 0: return paxg::Color(45, 87, 154); // 青 case 1: return paxg::Color(36, 92, 156); case 2: return paxg::Color(27, 96, 158); case 3: return paxg::Color(18, 101, 161); @@ -606,7 +606,7 @@ namespace paxs { case 22: return paxg::Color(0, 138, 104); case 23: return paxg::Color(0, 136, 94); case 24: return paxg::Color(0, 133, 83); - case 25: return paxg::Color(0, 131, 72); + case 25: return paxg::Color(0, 131, 72); // 緑 case 26: return paxg::Color(6, 136, 60); case 27: return paxg::Color(13, 141, 48); case 28: return paxg::Color(19, 145, 37); @@ -626,7 +626,7 @@ namespace paxs { case 42: return paxg::Color(208, 205, 10); case 43: return paxg::Color(216, 205, 6); case 44: return paxg::Color(223, 206, 3); - case 45: return paxg::Color(230, 207, 0); + case 45: return paxg::Color(230, 207, 0); // 黄 case 46: return paxg::Color(228, 202, 1); case 47: return paxg::Color(226, 197, 2); case 48: return paxg::Color(225, 191, 3); @@ -645,7 +645,7 @@ namespace paxs { case 61: return paxg::Color(193, 64, 28); case 62: return paxg::Color(189, 56, 34); case 63: return paxg::Color(186, 48, 40); - case 64: return paxg::Color(182, 40, 46); + case 64: return paxg::Color(182, 40, 46); // 赤 case 65: return paxg::Color(179, 32, 52); case 66: return paxg::Color(178, 31, 57); case 67: return paxg::Color(176, 30, 62); @@ -753,7 +753,7 @@ namespace paxs { // エージェント // if (lli.lpe == MurMur3::calcHash("agent1")) - { + if (select_draw != 5) { double pop_original = 0.0; switch (select_draw) { @@ -774,10 +774,6 @@ namespace paxs { //const double pop_original = settlement.getSNP() * 75.0; break; - case 5: - //const double - pop_original = settlement.getLanguage() * 75.0; - break; } const std::uint_least8_t pop = (pop_original >= 75) ? 75 : static_cast(pop_original); @@ -785,6 +781,30 @@ namespace paxs { 1.0f + (settlement.getPopulation() / 40.0f)//2.0f ).draw(getColor(pop)); } + else { + paxg::Color language_color = paxg::Color(99, 99, 99); // 灰色 + switch (settlement.getLanguage()) + { + case 0: + language_color = paxg::Color(99, 99, 99); // 灰色 + break; + case 1: + language_color = paxg::Color(0, 131, 72); // 緑色 + break; + case 2: + language_color = paxg::Color(45, 87, 154); // 青色 + break; + case 3: + language_color = paxg::Color(182, 40, 46); // 赤色 + break; + case 4: + language_color = paxg::Color(230, 207, 0); // 黄色 + break; + } + paxg::Circle(draw_pos, + 1.0f + (settlement.getPopulation() / 40.0f)//2.0f + ).draw(language_color); + } #ifdef PAXS_USING_SIV3D if (settlement.getOldPosition().x != -1 && settlement.getOldPosition().x != 0) { diff --git a/Library/PAX_SAPIENTICA/Simulation/Settlement.hpp b/Library/PAX_SAPIENTICA/Simulation/Settlement.hpp index 88cba3e61..13c572064 100644 --- a/Library/PAX_SAPIENTICA/Simulation/Settlement.hpp +++ b/Library/PAX_SAPIENTICA/Simulation/Settlement.hpp @@ -565,7 +565,7 @@ namespace paxs { } for (int i = 0; i < loop; ++i) { // 傾斜含むコスト - const double slope_cost = cost_list[i] + max_cost * (slope_list[i] / 250.0) * 2 /* 傾斜の影響度を高くする */; + const double slope_cost = cost_list[i] + max_cost * ((slope_list[i] <= 129) ? 0 : slope_list[i] / 250.0) /* 傾斜の 9.25334 度以下の土地を優先 */; if (cost == -1.0 || cost > slope_cost) { cost = slope_cost; index_num = i; @@ -691,13 +691,23 @@ namespace paxs { /// @brief Get the Language. /// @brief 言語を取得 - double getLanguage() const noexcept { - std::uint_least64_t language = 0; - + std::uint_least8_t getLanguage() const noexcept { + static std::uint_least8_t language[256]; + for (std::size_t i = 0; i < 256; ++i) { + language[i] = 0; + } for (std::size_t i = 0; i < agents.size(); ++i) { - language += static_cast(agents[i].cgetLanguage()); + ++language[agents[i].cgetLanguage()]; + } + std::size_t max_count = 0; + std::size_t max_index = 0; + for (std::size_t i = 0; i < 256; ++i) { + if (language[i] > max_count) { + max_count = language[i]; + max_index = i; + } } - return static_cast(language) / static_cast(agents.size()) / 255.0; + return static_cast(max_index); } /// @brief Get the most mtDNA. diff --git a/Library/PAX_SAPIENTICA/Simulation/SettlementSimulator.hpp b/Library/PAX_SAPIENTICA/Simulation/SettlementSimulator.hpp index 48a464f2a..af95f88d8 100644 --- a/Library/PAX_SAPIENTICA/Simulation/SettlementSimulator.hpp +++ b/Library/PAX_SAPIENTICA/Simulation/SettlementSimulator.hpp @@ -20,6 +20,8 @@ #include #include +#include +#include #include #include #include @@ -36,6 +38,14 @@ namespace paxs { + // シミュレーション出力フォルダ用の時刻取得 + std::string calcDateTime() { + static char buffer[20]; + std::time_t t = std::time(nullptr); + std::strftime(buffer, sizeof(buffer), "%Y-%m-%d-%H-%M-%S", std::localtime(&t)); + return buffer; + } + class SettlementSimulator { public: using Agent = paxs::SettlementAgent; @@ -96,15 +106,60 @@ namespace paxs { } } } + // 結果の文字列を出力 + void outputResultString(std::ofstream& ofs_) const { + ofs_ << "step_count" << '\t' << "settlement" << '\t' << "population" << '\t'; + } + // 結果の最後の文字列を出力 + void outputResultLastString(std::ofstream& ofs_) const { + ofs_ << "step_count" << '\n'; + } + // 結果の地区名を出力 + void outputResultDistrictName(std::ofstream& ofs_, const std::size_t i_) const { + ofs_ << japan_provinces->cgetDistrictList()[i_].name << '\t'; + } + // 集落の初期化時にシミュレーション変数を出力 + void initResults() { + // 出力 + const std::string str = "SimulationResults/" + calcDateTime(); + std::filesystem::create_directories(str); + pop_ofs = std::ofstream(str + "/Population.txt"); + mtdna_ofs = std::ofstream(str + "/mtDNA.txt"); + snp_ofs = std::ofstream(str + "/SNP.txt"); + language_ofs = std::ofstream(str + "/Language.txt"); + live_ofs = std::ofstream(str + "/HabitableLand.txt"); + + outputResultString(pop_ofs); + outputResultString(mtdna_ofs); + outputResultString(snp_ofs); + outputResultString(language_ofs); + for (std::size_t i = 0; i < max_number_of_districts; ++i) { + outputResultDistrictName(pop_ofs, i); + outputResultDistrictName(mtdna_ofs, i); + outputResultDistrictName(snp_ofs, i); + outputResultDistrictName(language_ofs, i); + } + outputResultLastString(pop_ofs); + outputResultLastString(mtdna_ofs); + outputResultLastString(snp_ofs); + outputResultLastString(language_ofs); + } /// @brief Initialize the simulator. /// @brief 集落の初期化 /// @details 集落をクリアし、地域ごとに指定されたエージェント数になるようにランダムに配置する void init() { + initResults(); settlement_grids.clear(); initRandomizeSettlements(); randomizeSettlements(true, false /* 在地人 */); calcPop(); // 人口を計算 + + // 可住地の数を出力 + live_ofs << "district\thabitable_land\n"; + for (std::size_t i = 0; i < max_number_of_districts; ++i) { + live_ofs << japan_provinces->cgetDistrictList()[i].name << '\t' << (*live_list)[i + 1].habitable_land_positions.size() << '\n'; + } } /// @brief Run the simulation for the specified number of steps. @@ -149,6 +204,7 @@ namespace paxs { std::size_t ryopop[max_number_of_districts]{}; std::size_t ryoset[max_number_of_districts]{}; double ryosnp[max_number_of_districts]{}; + double ryolanguage[max_number_of_districts]{}; // 地名を描画 for (const auto& agent : getSettlementGrids()) { @@ -160,6 +216,7 @@ namespace paxs { if (ryo_id < max_number_of_districts) { ryopop[ryo_id]+= settlement.getPopulation(); // 地区ごとに人口数を増加させる ryosnp[ryo_id]+= settlement.getSNP(); // 地区ごとに SNP を増加させる + ryolanguage[ryo_id]+= settlement.getLanguage(); // 地区ごとに言語を増加させる ++(ryoset[ryo_id]); // mtDNA ごとにカウント @@ -170,21 +227,25 @@ namespace paxs { } } pop_ofs << step_count << '\t' << sat_num << '\t' << pop_num << '\t'; - pop_mtdna_ofs << step_count << '\t' << sat_num << '\t' << pop_num << '\t'; - pop_snp_ofs << step_count << '\t' << sat_num << '\t' << pop_num << '\t'; + mtdna_ofs << step_count << '\t' << sat_num << '\t' << pop_num << '\t'; + snp_ofs << step_count << '\t' << sat_num << '\t' << pop_num << '\t'; + language_ofs << step_count << '\t' << sat_num << '\t' << pop_num << '\t'; for (std::size_t i = 0; i < max_number_of_districts; ++i) { ryosnp[i] /= static_cast(ryoset[i]); + ryolanguage[i] /= static_cast(ryoset[i]); pop_ofs << ryopop[i] << '\t'; - pop_snp_ofs << ryosnp[i] << '\t'; + snp_ofs << ryosnp[i] << '\t'; + language_ofs << ryolanguage[i] << '\t'; for (std::size_t j = 0; j < japan_provinces->getSizeMtDNA(); ++j) { if (int(mtdna_num[i][j]) == 0) continue; - pop_mtdna_ofs << japan_provinces->getMtDNA_Name(static_cast(j)) << ':' << int(mtdna_num[i][j]) << '/'; + mtdna_ofs << japan_provinces->getMtDNA_Name(static_cast(j)) << ':' << int(mtdna_num[i][j]) << '/'; } - pop_mtdna_ofs << '\t'; + mtdna_ofs << '\t'; } pop_ofs << step_count << '\n'; - pop_mtdna_ofs << step_count << '\n'; - pop_snp_ofs << step_count << '\n'; + mtdna_ofs << step_count << '\n'; + snp_ofs << step_count << '\n'; + language_ofs << step_count << '\n'; } std::vector> move_list; @@ -358,11 +419,13 @@ namespace paxs { habitable_land_positions.emplace_back(habitable_land_positions_); } }; - std::unique_ptr> live_list; + std::unique_ptr> live_list; - std::ofstream pop_ofs = std::ofstream("pop.txt"); - std::ofstream pop_mtdna_ofs = std::ofstream("pop_mtdna.txt"); - std::ofstream pop_snp_ofs = std::ofstream("pop_snp.txt"); + std::ofstream pop_ofs; + std::ofstream mtdna_ofs; + std::ofstream snp_ofs; + std::ofstream language_ofs; + std::ofstream live_ofs; /// @brief () /// @brief 集落をランダムに配置する前の初期化処理 @@ -371,7 +434,7 @@ namespace paxs { environment->getLandPositions(land_positions); - live_list = std::unique_ptr>(new std::array()); + live_list = std::unique_ptr>(new std::array()); if (live_list.get() == nullptr) { std::cout << "Low memory" << std::endl; diff --git a/Library/PAX_SAPIENTICA/Version.hpp b/Library/PAX_SAPIENTICA/Version.hpp index ccd2b0125..ffae57987 100644 --- a/Library/PAX_SAPIENTICA/Version.hpp +++ b/Library/PAX_SAPIENTICA/Version.hpp @@ -19,7 +19,7 @@ // 正式バージョン数値 #ifndef PAX_SAPIENTICA_LIBRARY_VERSION -#define PAX_SAPIENTICA_LIBRARY_VERSION (20240804L) +#define PAX_SAPIENTICA_LIBRARY_VERSION (20241030L) #endif // PAX_SAPIENTICA 主要バージョン ( 0 がテスト版 , 1 から正式リリース版 ) [vX.a.a] @@ -34,12 +34,12 @@ // PAX_SAPIENTICA 微修正バージョン [v6.0.a.a.X] #ifndef PAX_SAPIENTICA_LIBRARY_PATCHLEVEL -#define PAX_SAPIENTICA_LIBRARY_PATCHLEVEL (2) +#define PAX_SAPIENTICA_LIBRARY_PATCHLEVEL (10) #endif // バージョン名 ( https://github.com/AsPJT/PAX_SAPIENTICA ) #ifndef PAX_SAPIENTICA_LIBRARY_VERSION_NAME -#define PAX_SAPIENTICA_LIBRARY_VERSION_NAME "1.2.2 KIZAMIME TOTTAIMON" +#define PAX_SAPIENTICA_LIBRARY_VERSION_NAME "1.2.10 KIZAMIME TOTTAIMON" #endif //char name[ @@ -51,14 +51,22 @@ 更新履歴 バージョン | 更新日 | 概要 6.0.1.0.X | 2024/0X/XX | コピペ用 - 6.0.1.2.2 | 2024/08/04 | シミュレーションで動く方向に偏りを指定する機能を追加 - 6.0.1.2.1 | 2024/07/15 | シミュレーションの全定数の入力データ化 + 6.0.1.2.10 | 2024/10/30 | シミュレーション結果の追加 #110 + 6.0.1.2.9 | 2024/10/26 | 渡来人及び地区別の初期時の狩猟採集、農耕、SNP、言語の値の指定機能 #109 + 6.0.1.2.8 | 2024/10/26 | シミュレーションの選択項目のテキストを表示 #109 + 6.0.1.2.7 | 2024/10/26 | OpenMP による A* 探索アルゴリズムの高速化 #109 + 6.0.1.2.6 | 2024/10/20 | 移動経路を矢印で可視化する機能を追加 #108 + 6.0.1.2.5 | 2024/10/19 | A* search algorithm を追加 #107 + 6.0.1.2.4 | 2024/10/02 | 九州大学古人骨データ(縄文・弥生)を追加 #106 + 6.0.1.2.3 | 2024/09/08 | 経緯度データ表示機能に拡大率と開始年・終了年を指定する機能を追加 #105 + 6.0.1.2.2 | 2024/08/04 | シミュレーションで動く方向に偏りを指定する機能を追加 #104 + 6.0.1.2.1 | 2024/07/15 | シミュレーションの全定数の入力データ化 #103 6.0.1.2.0 | 2024/07/12 | シミュレーション更新版 - 6.0.1.1.10 | 2024/07/11 | 生命表の入力機能を追加 - 6.0.1.1.9 | 2024/06/16 | シミュレーションの入力データ読み込みの最適化 - 6.0.1.1.8 | 2024/06/13 | シミュレーションの最適化(型の小型化) - 6.0.1.1.8 | 2024/06/11 | ゲノムモデル「SNP」変数の追加 - 6.0.1.1.7 | 2024/06/09 | 死産率と集団の最大人数を狩猟採集民と農耕民で値分け対応 + 6.0.1.1.10 | 2024/07/11 | 生命表の入力機能を追加 #102 + 6.0.1.1.9 | 2024/06/16 | シミュレーションの入力データ読み込みの最適化 #101 + 6.0.1.1.8 | 2024/06/13 | シミュレーションの最適化(型の小型化) #100 + 6.0.1.1.8 | 2024/06/11 | ゲノムモデル「SNP」変数の追加 #99 + 6.0.1.1.7 | 2024/06/09 | 死産率と集団の最大人数を狩猟採集民と農耕民で値分け対応 #98 6.0.1.1.6 | 2024/06/07 | 夫方居住婚・選択居住婚の実装 6.0.1.1.5 | 2024/06/05 | mtDNAデータの入力機能の実装 6.0.1.1.4 | 2024/05/31 | 樺太アイヌ語地名データの追加