mainold.py 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. """
  4. main.py — evaluation.py の各種プロットを一括実行
  5. Unweighted:
  6. 1) plot_accuracy_vs_budget
  7. 2) plot_value_vs_used
  8. 3) plot_value_vs_budget_target
  9. 4) plot_widthsum_alllinks_vs_budget
  10. 5) plot_minwidthsum_perpair_vs_budget
  11. Weighted(重要度 I_d を幅に掛ける版):
  12. 6) plot_widthsum_alllinks_weighted_vs_budget
  13. 7) plot_minwidthsum_perpair_weighted_vs_budget
  14. 出力:
  15. - 生データ pickle -> ./outputs/
  16. - 図 PDF -> カレントディレクトリ
  17. """
  18. from multiprocessing.pool import Pool
  19. import os
  20. import random
  21. # 任意:あなたの環境のユーティリティ。無ければフォールバック。
  22. try:
  23. from utils import set_random_seed
  24. except Exception:
  25. def set_random_seed(seed: int = 12):
  26. random.seed(seed)
  27. try:
  28. import numpy as np
  29. np.random.seed(seed)
  30. except Exception:
  31. pass
  32. # evaluation 側のプロット関数
  33. from evaluation import (
  34. # Accuracy / Value 系
  35. plot_accuracy_vs_budget,
  36. plot_value_vs_used,
  37. plot_value_vs_budget_target,
  38. # 幅(UB-LB)系 - Unweighted
  39. plot_widthsum_alllinks_vs_budget,
  40. plot_minwidthsum_perpair_vs_budget,
  41. # 幅(UB-LB)系 - Weighted (× I_d)
  42. plot_widthsum_alllinks_weighted_vs_budget,
  43. plot_minwidthsum_perpair_weighted_vs_budget,
  44. )
  45. def main():
  46. # ===== 実験パラメータ =====
  47. set_random_seed(12)
  48. num_workers = max(1, (os.cpu_count() or 4) // 2)
  49. noise_model_list = ["Depolar"] # 例: ["Depolar", "Dephase"]
  50. scheduler_names = ["LNaive", "Greedy"] # 実装済みスケジューラ名に合わせて
  51. node_path_list = [5, 5, 5] # ペアごとのリンク本数
  52. importance_list = [0.3, 0.6, 0.9] # value系&weighted幅系で使用
  53. budget_list = [3000, 6000, 9000, 12000, 15000, 18000]
  54. bounces = (1, 2, 3, 4) # 測定深さ候補(あなたの定義に従う)
  55. repeat = 10 # 反復回数(精度と時間のトレードオフ)
  56. delta = 0.1 # 幅用の信頼度パラメータ(Hoeffding)
  57. print("=== Config ===")
  58. print(f"workers={num_workers}, noise_models={noise_model_list}")
  59. print(f"schedulers={scheduler_names}")
  60. print(f"node_path_list={node_path_list}, importance_list={importance_list}")
  61. print(f"budgets={budget_list}, bounces={bounces}, repeat={repeat}, delta={delta}")
  62. print("================\n")
  63. # ===== 実行キュー =====
  64. p = Pool(processes=num_workers)
  65. jobs = []
  66. for noise_model in noise_model_list:
  67. # --- Accuracy ---
  68. jobs.append(p.apply_async(
  69. plot_accuracy_vs_budget,
  70. args=(budget_list, scheduler_names, noise_model,
  71. node_path_list, importance_list, bounces, repeat),
  72. kwds={"verbose": True}
  73. ))
  74. # --- Value: x=used(実コスト平均) ---
  75. jobs.append(p.apply_async(
  76. plot_value_vs_used,
  77. args=(budget_list, scheduler_names, noise_model,
  78. node_path_list, importance_list, bounces, repeat),
  79. kwds={"verbose": True}
  80. ))
  81. # --- Value: x=target(指定予算) ---
  82. jobs.append(p.apply_async(
  83. plot_value_vs_budget_target,
  84. args=(budget_list, scheduler_names, noise_model,
  85. node_path_list, importance_list, bounces, repeat),
  86. kwds={"verbose": True}
  87. ))
  88. # --- Width (UB-LB) Unweighted: 全リンク総和 ---
  89. jobs.append(p.apply_async(
  90. plot_widthsum_alllinks_vs_budget,
  91. args=(budget_list, scheduler_names, noise_model,
  92. node_path_list, importance_list, bounces, repeat),
  93. kwds={"delta": delta, "verbose": True}
  94. ))
  95. # --- Width (UB-LB) Unweighted: ペア最小幅の総和 ---
  96. jobs.append(p.apply_async(
  97. plot_minwidthsum_perpair_vs_budget,
  98. args=(budget_list, scheduler_names, noise_model,
  99. node_path_list, importance_list, bounces, repeat),
  100. kwds={"delta": delta, "verbose": True}
  101. ))
  102. # --- Width (UB-LB) Weighted: 全リンク I_d·幅 総和 ---
  103. jobs.append(p.apply_async(
  104. plot_widthsum_alllinks_weighted_vs_budget,
  105. args=(budget_list, scheduler_names, noise_model,
  106. node_path_list, importance_list, bounces, repeat),
  107. kwds={"delta": delta, "verbose": True}
  108. ))
  109. # --- Width (UB-LB) Weighted: ペアごとの I_d·最小幅 総和 ---
  110. jobs.append(p.apply_async(
  111. plot_minwidthsum_perpair_weighted_vs_budget,
  112. args=(budget_list, scheduler_names, noise_model,
  113. node_path_list, importance_list, bounces, repeat),
  114. kwds={"delta": delta, "verbose": True}
  115. ))
  116. # ===== 実行 & 同期 =====
  117. p.close()
  118. p.join()
  119. for j in jobs:
  120. j.get()
  121. print("\nAll jobs finished.")
  122. print("Pickles -> ./outputs/, PDF -> カレントディレクトリ に保存されます。")
  123. if __name__ == "__main__":
  124. main()