Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 生成在两种组合下形成和的一组随机数_Python_Matlab_Heuristics - Fatal编程技术网

Python 生成在两种组合下形成和的一组随机数

Python 生成在两种组合下形成和的一组随机数,python,matlab,heuristics,Python,Matlab,Heuristics,我想生成16个随机非负整数,比如a,b,c,d,e,f,g,h,I,j,k,l,m,n,o,p a+b+c+d = a particular sum e+f+g+h = another sum i+j+k+l = another sum m+n+o+p = another sum 这很容易。但是问题是, a+e+i+m = another sum b+f+j+n = another sum c+g+k+o = another sum d+h+l+p = another sum 我在Matla

我想生成16个随机非负整数,比如a,b,c,d,e,f,g,h,I,j,k,l,m,n,o,p

a+b+c+d = a particular sum
e+f+g+h = another sum
i+j+k+l = another sum
m+n+o+p = another sum
这很容易。但是问题是,

a+e+i+m = another sum
b+f+j+n = another sum
c+g+k+o = another sum
d+h+l+p = another sum
我在Matlab中编写了一个非常复杂的代码,生成满足条件的数字。该代码大约需要0.5秒,在运行1000次迭代后生成大约920个这样的数组。数字16是一个原型。实际人数为1794人。所以,很明显我写的东西不会有什么帮助。任何帮助都会很好


谢谢。

这个问题可以用带有随机加权代价函数的整数程序来解决,然后每次运行这段代码时,都会得到不同的解决方案

A = [A1; -A1; -eye(N)]
b = [sum1; sum2; ...; sumM ; -sum1; -sum2; ... ; -sumM; zeros(N,1)];
intcon = N;
f = randn(N,1);  %random cost function, will generate different solution everytime
solution = intlinprog(f,intcon,A,b);
其中A1是表示和的矩阵,在您的示例中为

A1 = [1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0;
1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0;
1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0;
1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0;
1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0;
0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0;
0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0;
0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1];

简单地说,你把你的约束转化为Ax,随机对你来说意味着什么?我不认为数字的分布对我有多大意义,如果这就是你想要的。如果这不是你的意思,请澄清。非常感谢。a..p的输入域是什么?1到100?底片?浮点值还是整数?您是否正在尝试为有限的域查找所有可能的数组?还是尽可能快地生成长度为N的M个数组而不受域限制?满足这些求和要求,当然是因为没有提到这些细节。我将编辑这个问题。和,M个长度为N的数组,在图中N是16。M可能是一个足够大的数字,比如1000。非常感谢!这对我有帮助。但是,我有一个疑问。在A和b矩阵中,A=[A1]和b=[sum1;sum2;;sumM;]不够吗?我不明白你为什么加上其余的。你能解释一下吗?谢谢。这个程序大约需要0.02秒才能找到一个包含16个变量的解。f是成本函数,所以你要搜索一个最小化f'*x的解,如果你设置f=rand,那么你每次都有一个随机成本函数。b中的-eyeN和零用于约束解为非负解。事实上,我现在要添加一个更优雅的方式。谢谢!这样对我来说更清楚。不幸的是,我现在没有优化工具箱。所以,我需要再问一个问题。我希望你不介意回答。Matlab网站上的示例生成非整数解。但是,我需要整数。有什么想法吗?intcon告诉程序你有多少个整数变量,因为我们把intcon设置为N,它只生成整数。
Aeq = A1
beq = [sum1; sum2; ...; sumM];
ub = inf*ones(N,1);
lb = zeros(N,1);
intcon = N;
f = randn(N,1);  %random cost function, will generate different solution everytime
solution = intlinprog(f,intcon,[],[], Aeq, beq, lb, ub);