#Andy Huchala编写的代码#计算OEIS A251419的a(n)#三角网格图的控制数#需要安装Gurobi#选择板尺寸(n>1)n=10从古罗比进口*导入数学m=型号(“ip”)#n=4的示例# __# / \__#\__/j\___#/-i\__/i+j\__# \__/0 \___/ \#/\__/i\__/#\__/-j\___/# / \__/# \__/# __# / \__# \__/01\__#/-i \__/11年\__# \__/00\__/21\# / \__/10\__/#\__/-j\__/# / \__/# \__/#构造一组可容许的(i,j)对#事实证明,古罗比不喜欢字符串中的负数,所以我们在所有内容中添加nvars_ij=[]#初始化xji形式的所有变量对于范围(-n,n+1)中的i:对于范围(-n,n+1)中的j:如果i-j<=(n+1)//3和j<=n//3且i>=-((n-1)//3):exec(“x_”+str(i+n)+“_”+str(j+n)+“=m.addVar(lb=0,ub=1,vtype=GRB.INTEGER,name=\”x_“+strvars_ij.append((i,j))#我不明白为什么这失败了#@断言(len(vars_ij)==(n*(n+1))//2)打印(len(vars_ij),(n*(n+1))//2)#设定目标:最小化x_i_j的总和t=“”对于vars_ij中的(i,j):t+=“+x_”+str(i+n)+“_”+str(j+n)t=t[1:]执行(“obj=”+t)m.setObjective(对象,GRB.MINIMIZE)#指定约束对于vars_ij中的(i,j):#找出(i,j)可能被攻击的所有位置,将每个位置添加到约束中#对于(i,j):(i,j)必须被攻击或占领s=“m.addLConstr(”s+=“x_”+str(i+n)+“_”+str(j+n)+“+”#一件作品可能受到威胁的所有方向目录列表=[(i-1,j),(i,j-1),(i+1,j)对于目录列表中的(a,b):如果(a,b)以vars _ij表示:s+=“x_”+str(a+n)+“_”+str(b+n)+“+”s=s[:-1]执行(s+“>=1”)m.优化()#对于m中的v,getVars():#打印(“%s%g”%(v.varName,v.x))打印(“对象:%g”%Obj.getValue())