#!/bin/sh cd /tmp u='https://pkg.freebsd.org/FreeBSD:14:amd64/quarterly/All/Hashed/coin-or-highs-1.15.1~2$hytxt5tw.pkg' curl -Ls "$u" -o h.pkg;mkdir h;tar -xf h.pkg -C h 2>/dev/null cat >g.py <<'PY' W,H=28,22 pos=[(x,y) for y in range(0,111,5) for x in range(0,141,5)] c=[(t,x,y) for t in range(3) for x,y in pos] with open('m.lp','w') as f: f.write('minimize\nobj:'+'+'.join(f'{[20000,1600,2000][t]}x{k}' for k,(t,x,y) in enumerate(c))+'\nsubject to\n') f.write('threshold:'+'+'.join(f'y{p}' for p in range(W*H))+'>=543\n') for j in range(H): for i in range(W): a,b=5*i+2.5,5*j+2.5;q=[] for k,(t,x,y) in enumerate(c): ok=(a-x)**2+(b-y)**2<=(400 if t==0 else 25) if t<2 else abs(a-x)<=5 and abs(b-y)<=5 if ok:q.append(f'x{k}') p=j*W+i;f.write(f'c{p}:y{p}-'+'-'.join(q)+'<=0\n') f.write('bounds\n'+''.join(f'0<=y{p}<=1\n' for p in range(W*H))+'binary\n') f.write(''.join(f'x{k}\n' for k in range(len(c))+'end\n') PY python3 g.py h/usr/local/bin/highs --model_file m.lp --time_limit 5 --solution_file sol.txt --parallel on 2>&1 | tail -n45 gawk '/^x[0-9]+ /&&$2>.5{print}' sol.txt | head -n100