"""Focused exploration: attach points in the door's middle (arm hangs over the door), WC y track near the rail.""" import math, sys, os sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) from design_explore import evaluate, stroke_ok rows = [] for s in (0.0020, 0.0022, 0.0024, 0.0026): for u in [i / 40 for i in range(12, 28)]: for px in (-2.0, -1.7, -1.4, -1.1, -0.8, -0.5): for cle in (0.2, 0.4): ra = evaluate(s, u, px, 0.0, 0.0, cle, version="A") rb = evaluate(s, u, px, 0.0, 0.0, cle, version="B") rf = evaluate(s, u, px, 0.0, 0.0, cle, door="Moonpool_Door_Fore", version="A") if ra["fail"] or rb["fail"] or rf["fail"]: continue dead = min(stroke_ok(ra, s), stroke_ok(rb, s)) rng = lambda k: math.degrees(max(ra[k][1], rb[k][1]) - min(ra[k][0], rb[k][0])) elo = math.degrees(min(ra["elb"][0], rb["elb"][0])); ehi = math.degrees(max(ra["elb"][1], rb["elb"][1])) sc = (min(ra["minq5"], rb["minq5"], math.radians(40)) * 3 + min(ra["cl"], rb["cl"], 0.3) * 10 + min(dead, 0.3) * 6 - math.radians(rng("q3")) * 0.6 - math.radians(rng("q2")) * 0.4 - math.radians(rng("q1")) * 0.1 - max(0, ehi - 150) * 0.05 - max(0, 70 - elo) * 0.03) rows.append((sc, s, u, px, cle, ra, rb, dead, rng("q1"), rng("q2"), rng("q3"), elo, ehi)) rows.sort(key=lambda t: -t[0]) for sc, s, u, px, cle, ra, rb, dead, r1, r2, r3, elo, ehi in rows[:30]: print("sc %.2f s %.4f u %.3f px %.2f cle %.1f | q1r %.0f q2r %.0f q3r %.0f elb %.0f..%.0f q5min %.0f/%.0f dead %.2f cl %.2f/%.2f (%s|%s) T %.2f face %s n %s q1 %.0f..%.0f" % ( sc, s, u, px, cle, r1, r2, r3, elo, ehi, math.degrees(ra["minq5"]), math.degrees(rb["minq5"]), dead, ra["cl"], rb["cl"], ra["clwhere"], rb["clwhere"], ra["T"], tuple(round(v, 2) for v in ra["face"]), tuple(round(v, 2) for v in ra["n"]), math.degrees(ra["q1"][0]), math.degrees(ra["q1"][1]))) print(len(rows))