#!/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=28 H=22 pos=[(x,y) for y in range(0,111,5) for x in range(0,141,5)] cands=[(t,x,y) for t in range(3) for x,y in pos] f=open('m.lp','w') f.write('minimize\nobj: ') f.write(' + '.join(str([20000,1600,2000][t])+' x'+str(k) for k,(t,x,y) in enumerate(cands))) f.write('\nsubject to\nthreshold: ') f.write(' + '.join('y'+str(p) for p in range(W*H))) f.write(' >= 543\n') for j in range(H): for i in range(W): a=5*i+2.5;b=5*j+2.5;q=[] for k,(t,x,y) in enumerate(cands): if t==0:ok=(a-x)**2+(b-y)**2<=400 elif t==1:ok=(a-x)**2+(b-y)**2<=25 else:ok=abs(a-x)<=5 and abs(b-y)<=5 if ok:q.append('x'+str(k)) p=j*W+i f.write('c'+str(p)+': y'+str(p)+' - '+' - '.join(q)+' <= 0\n') f.write('bounds\n') for p in range(W*H):f.write('0 <= y'+str(p)+' <= 1\n') f.write('binary\n') for k in range(len(cands)):f.write('x'+str(k)+'\n') f.write('end\n') f.close() 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 awk '/^x[0-9]+ /&&$2>.5{print}' sol.txt | head -n100