Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-08-12 08:24:54

0001 #!/usr/bin/env python
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())