#! /pkg/gnu/bin/gawk -f BEGIN { srand() # getline rlp FS = "\t" #1 l ab=154 b1=51 b2=17 b3=0 b4=6 bb=8 sf= sb= k=25 sb= # restart from file if you can if (getline < "holdbest.dat" > 0) { holdbest[++i]=$1 seen[$1] = 1 while (getline < "holdbest.dat") { if (seen[$1]) { badlineup = 1; break } holdbest[++i]=$1 seen[$1] = 1 } # if (!badlineup) print "restoring file" > "/dev/stderr" } while (getline < "batters") { who[++n] = $1; getline < "batters" } close("batters") if (i<15 || badlineup) { for (i=1; i<=15; i++) holdbest[i] = i # print "initializing lineup" } for (iter=1; iter<=10; iter++) { print "\n\niter="iter > "/dev/stderr" # bestscore = 0 besti = 1; bestj = 1 # may be extra work, but needed when restarting from file bestscore = score(holdbest) for (i=1; i<=9; i++) { for (j=i+1; j<=15; j++) { for (k=1; k<=15; k++) bats[k] = holdbest[k] if (0) if (rand() < .9-(iter/10)) continue hold = bats[i] bats[i] = bats[j] bats[j] = hold print "studying swap: "who[i]"("i") with "who[j]"("j")" > "/dev/stderr" scorethis = score(bats) if (scorethis+0 > bestscore+0) { bestscore = scorethis for (k=1; k<=15; k++) nextholdbest[k] = bats[k] besti = i bestj = j } } } print "\n\n...swapping "besti" with "bestj > "/dev/stderr" print "score="bestscore > "/dev/stderr" # for (k=1; k<=15; k++) print nextholdbest[k] > "/dev/stderr" system("rm -f holdbest.dat") for (k=1; k<=15; k++) print nextholdbest[k] > "holdbest.dat" close("holdbest.dat") for (k=1; k<=15; k++) holdbest[k] = nextholdbest[k] if (besti == bestj) break # reached a local maximum } for (i=1; i<=9; i++) print holdbest[i] } function score(bats) { # printf " ... " > "/dev/stderr" system("rm -f straw.dat") for (k=1; k<=9; k++) print who[bats[k]] > "straw.dat" close("straw.dat") # now score this order com = "sim4 -v iters=400 -v output=0 -v remake=0 -v prog=strawman | grep 'chasings total'" com | getline thisscore = $1 printf "..."thisscore > "/dev/stderr" print "\twith "who[bats[1]]" leading off" > "/dev/stderr" print "\t\t\twith "who[bats[3]]" in #3 hole" > "/dev/stderr" print "\t\t\twith "who[bats[4]]" as cleanup" > "/dev/stderr" close(com) return thisscore }