我想找到一种方法来返回受约束 x_1+...+x_n=constant 约束的所有向量 [x_1,...,x_n] 的集合,每个 x_i 都是非负整数,顺序无关紧要. (所以 [1,1,1,2]=[2,1,1,1])。我的编程经验很少,但在过去一个月左右的时间里我一直在使用 Python (sage)。
特别是,我试图找到非负整数(受约束)上的 15 变量(对称)函数的最小值,但我想编写一个程序来做到这一点,因为我可以将它用于类似项目也是如此。
我已经尝试编写程序 4 天了,我突然意识到我必须以某种方式递归地定义我的函数......而且我不知道该怎么做。我有一个代码,它的功能与我想要的类似(但还远未完成)。即使我确定这是做我想做的事情的效率最低的方法,我也会发布它:
def each_comb_first_step(vec):
row_num=floor(math.fabs((vec[0,vec.ncols()-1]-vec[0,vec.ncols()-2]))/2)+1
mat=matrix(ZZ, row_num, vec.ncols(), 0)
for j in range(row_num):
mat[j]=vec
vec[0,vec.ncols()-2]=vec[0,vec.ncols()-2]+1
vec[0,vec.ncols()-1]=vec[0,vec.ncols()-1]-1
return mat
def each_comb(num,const):
vec1=matrix(ZZ,1,num,0)
vec1[0,num-1]=const
time=0
steps=0
subtot=0
for i in (2,..,num-1):
steps=floor(const/(i+1))
for j in (1,..,steps):
time=j
for k in (num-i-1,..,num-2):
vec1[0,k]=time
time=time+1
subtot=0
for l in range(num-1):
subtot=subtot+vec1[0,l]
vec1[0,num-1]=const-subtot
mat1=each_comb_first_step(vec1)
return mat1
是否有任何可能已经执行此操作的功能或类似的功能?任何帮助或建议将不胜感激。