re: target preference works; the blocker is now combat effectiveness, not RE
pilot.py gained SYLPH_PREFER, a unit-name substring whose matches get their target score multiplied by 0.05 while everything else is multiplied by 4.0. With SYLPH_PREFER=e010 a clean 320 s run, zero stalls by the witness, killed eight turrets and two Attacker_S. The preference is real -- e010 kills went from roughly one across all previous runs to two in a single run -- but it is weak. Turrets still outnumber attackers four to one in the kill log, because target commitment and simple proximity keep pulling the nose back to them, and phase 1 fields 108 turret craft against 16 attackers. Deployed stayed at 41 throughout, so no phase advance. That quantifies the blocker. Clearing the marked attackers means destroying 16 craft, and at two per 320 s that is about 2560 seconds, roughly 43 minutes of continuous verified-live flight across many chained attaches, against a freeze rate of about two runs in five. This is no longer a reverse-engineering problem. Everything needed to observe the phase advance is built and validated -- the roster-to-craft link, the liveness read, the stall witness, chained attaches and the discard rule. What is missing is a pilot good enough to complete the mission objective, which is game-playing work with an uncertain payoff. The choice is recorded rather than made, because it is about how much effort one confirmation is worth rather than a technical unknown: invest in the pilot, accept the static answer where only the trigger is inferred rather than observed, or attempt one very long chained run betting against the freeze rate.
This commit is contained in:
@@ -114,6 +114,7 @@ KILL_TURRETS = os.environ.get("SYLPH_KILL_TURRETS") == "1"
|
||||
|
||||
|
||||
HUNT = os.environ.get("SYLPH_HUNT") == "1"
|
||||
PREFER = os.environ.get("SYLPH_PREFER", "")
|
||||
|
||||
|
||||
class Pilot:
|
||||
@@ -389,6 +390,15 @@ class Pilot:
|
||||
lead = self.lead_point(p, v, d)
|
||||
theta = ang(lead - me_p, fwd)
|
||||
score = d * (1.0 + 3.0 * (theta / math.pi) ** 2)
|
||||
# SYLPH_PREFER biases target choice toward a unit-name substring.
|
||||
# Stage 02's phase-1 objective is stated outright in the guide
|
||||
# script -- "the attackers with the orange markers" -- i.e. e010,
|
||||
# but every kill in every run so far was an e007 turret, because
|
||||
# HUNT made turrets targets and KEEPOUT was tuned for them
|
||||
# (mission-objectives-text.md). Without this the pilot cannot be
|
||||
# pointed at the thing the mission actually asks for.
|
||||
if PREFER:
|
||||
score *= 0.05 if PREFER in nm else 4.0
|
||||
if score < bestscore:
|
||||
best, bestscore = (off, nm, lead, lead - me_p, d, r), score
|
||||
return best
|
||||
|
||||
@@ -22,7 +22,7 @@ for try in 1 2 3; do
|
||||
echo "--- bind attempt $try failed, retrying"; sleep 5
|
||||
done
|
||||
if [ "$BOUND" = 1 ]; then
|
||||
SYLPH_HUNT="$HUNT" SYLPH_KILL_TURRETS=1 SYLPH_KEEPOUT="${SYLPH_KEEPOUT:-1400}" SYLPH_HZ="${SYLPH_HZ:-8.0}" nohup python3 "$SD/pilot.py" "$CFG" "$SECS" \
|
||||
SYLPH_HUNT="$HUNT" SYLPH_KILL_TURRETS=1 SYLPH_KEEPOUT="${SYLPH_KEEPOUT:-1400}" SYLPH_HZ="${SYLPH_HZ:-8.0}" SYLPH_PREFER="${SYLPH_PREFER:-}" nohup python3 "$SD/pilot.py" "$CFG" "$SECS" \
|
||||
</dev/null >/tmp/live-pilot.log 2>&1 &
|
||||
PILOT=$!; echo "--- pilot (SYLPH_HUNT=$HUNT)"
|
||||
else echo "BIND FAILED after 3 attempts -- aborting, an unattended run tests nothing"; exit 4; fi
|
||||
|
||||
Reference in New Issue
Block a user