10 REM ========================================== 20 REM JERRY UCK - ROOTED IN A QUESTION 30 REM ========================================== 40 REM / QUESTION: Among all lawful interactions, which ones are worth Taking? 50 REM ========================================== 60 RANDOMIZE TIMER 70 REM ---- constants ---- 80 COH_MIN = 0.20 90 SAL_MAX = 0.80 100 SAL_HARDMAX = 0.95 110 STAB_MIN = 0.20 120 DECAY = 0.90 130 THICKEN = 0.05 140 REM ---- arrays ---- 150 DIM C(10) 160 DIM SED(10) 170 REM ---- action ids ---- 180 HOLD = 1 190 RETREAT = 2 200 ADVANCE = 3 210 YIELD = 4 220 REM init sediment 230 FOR I = 1 TO 4: SED(I) = 1: NEXT I 240 REM ========================================== 250 REM MAIN LOOP 260 REM ========================================== 270 GOSUB 1000 280 IF LAWFUL = 0 THEN GOTO 270 290 IF ASKABLE = 0 THEN GOSUB 6000: GOTO 270 300 GOSUB 2000 310 GOSUB 3000 320 GOSUB 4000 330 GOTO 270 1000 REM ========================================== 1010 REM DISCLOSE FIELD (STUBBED) 1020 REM Replace with real EdgeLaw disclosure reads 1030 REM ========================================== 1040 E5_COH = RND 1050 E6_IMM = RND 1060 E7_SAL = RND 1070 E10_STAB = RND 1080 LAWFUL = (E5_COH > COH_MIN) AND (E7_SAL < SAL_HARDMAX) 1090 ASKABLE = (E5_COH > COH_MIN) AND (E7_SAL < SAL_MAX) AND (E10_STAB > STAB_MIN) 1100 RETURN 2000 REM ========================================== 2010 REM ALLOW INTERACTIONS 2020 REM ========================================== 2030 N_CAND = 0 2040 HOLD_OK = 1 2050 RETREAT_OK = 1 2060 ADVANCE_OK = 1 2070 IF HOLD_OK THEN N_CAND = N_CAND + 1: C(N_CAND) = HOLD 2080 IF RETREAT_OK THEN N_CAND = N_CAND + 1: C(N_CAND) = RETREAT 2090 IF ADVANCE_OK THEN N_CAND = N_CAND + 1: C(N_CAND) = ADVANCE 2100 RETURN 3000 REM ========================================== 3010 REM SELECT LIGHTLY (random + sediment bias) 3020 REM ========================================== 3030 IF N_CAND = 0 THEN SELECTED = YIELD: RETURN 3040 REM ---- weighted pick by sediment ---- 3050 TOTAL = 0 3060 FOR I = 1 TO N_CAND 3070 A = C(I) 3080 TOTAL = TOTAL + SED(A) 3090 NEXT I 3100 X = RND * TOTAL 3110 RUNSUM = 0 3120 FOR I = 1 TO N_CAND 3130 A = C(I) 3140 RUNSUM = RUNSUM + SED(A) 3150 IF X <= RUNSUM THEN SELECTED = A: GOTO 3180 3160 NEXT I 3170 SELECTED = C(1) 3180 RETURN 4000 REM ========================================== 4010 REM ENACT 4020 REM ========================================== 4030 ON SELECTED GOSUB 5000, 5100, 5200, 5300 4040 REM Re-disclose after enact 4050 GOSUB 1000 4060 REM NEXT! = askable again (not reward) 4070 IF ASKABLE THEN GOSUB 9100 ELSE GOSUB 9000 4080 RETURN 5000 REM HOLD 5010 REM sustain contact without advancing 5020 RETURN 5100 REM RETREAT 5110 REM break contact, preserve field 5120 RETURN 5200 REM ADVANCE 5210 REM meet the loom 5220 RETURN 5300 REM YIELD 5310 REM do nothing / wait 5320 RETURN 6000 REM ========================================== 6010 REM YIELD / WAIT / MINIMAL PROBE 6020 REM ========================================== 6030 REM Not askable - be present, don't force 6040 SELECTED = YIELD 6050 GOSUB 5300 6060 RETURN 9000 REM ========================================== 9010 REM SEDIMENT PERISH (negation) 9020 REM ========================================== 9030 SED(SELECTED) = SED(SELECTED) * DECAY 9040 IF SED(SELECTED) < 0.1 THEN SED(SELECTED) = 0.1 9050 RETURN 9100 REM ========================================== 9110 REM SEDIMENT THICKEN 9120 REM ========================================== 9130 SED(SELECTED) = SED(SELECTED) + THICKEN 9140 IF SED(SELECTED) > 5 THEN SED(SELECTED) = 5 9150 RETURN 9999 END