File indexing completed on 2026-08-12 08:24:54
0001
0002 """Compute DTLZ2 objectives from direct CLI arguments and write JSON output."""
0003
0004 from __future__ import annotations
0005
0006 import argparse
0007 import json
0008 import math
0009 import sys
0010 import time
0011 from pathlib import Path
0012
0013
0014 def parse_args() -> argparse.Namespace:
0015 parser = argparse.ArgumentParser(description=__doc__)
0016 parser.add_argument("--x1", type=float, required=True)
0017 parser.add_argument("--x2", type=float, required=True)
0018 parser.add_argument("--x3", type=float, required=True)
0019 parser.add_argument("--x4", type=float, required=True)
0020 parser.add_argument("--x5", type=float, required=True)
0021 parser.add_argument("--output", type=Path, required=True)
0022 parser.add_argument("--label", type=str, default="slurm-dtlz2")
0023 parser.add_argument("--sleep-sec", type=float, default=0.0)
0024 parser.add_argument("--repeat", type=int, default=2)
0025 return parser.parse_args()
0026
0027
0028 def compute_objectives(x1: float, x2: float, x3: float, x4: float, x5: float) -> dict[str, float]:
0029 tail = [x2, x3, x4, x5]
0030 g = sum((value - 0.5) ** 2 for value in tail)
0031 factor = 1.0 + g
0032 f1 = factor * math.cos(x1 * math.pi / 2.0)
0033 f2 = factor * math.sin(x1 * math.pi / 2.0)
0034 return {"f1": float(f1), "f2": float(f2)}
0035
0036
0037 def main() -> int:
0038 args = parse_args()
0039 for step in range(args.repeat):
0040 print(f"[{args.label}] progress {step + 1}/{args.repeat}", flush=True)
0041 print(f"[{args.label}] stderr heartbeat {step + 1}", file=sys.stderr, flush=True)
0042 if args.sleep_sec > 0:
0043 time.sleep(args.sleep_sec)
0044
0045 payload = compute_objectives(args.x1, args.x2, args.x3, args.x4, args.x5)
0046 args.output.parent.mkdir(parents=True, exist_ok=True)
0047 args.output.write_text(json.dumps(payload, indent=2), encoding="utf-8")
0048 print(json.dumps(payload, indent=2), flush=True)
0049 return 0
0050
0051
0052 if __name__ == "__main__":
0053 raise SystemExit(main())