我需要将人们随机分配到组和类别中.不幸的是,我真的不知道从哪里开始.我试图用下面的例子来解释我的问题.任何有关这方面的帮助将非常感激.
我有207 '家庭类型A'和408 '家庭类型B'类别.总共有1524人需要被分配到207家庭类型A或408家庭类型B的类别.然而,对于家庭类型A ,1524人也需要组合在2到7组中,或者对于家庭类型B ,需要组合在2到6组中.
最终结果应该是1524人分配到207组(包含2至7人)和408组(包含2至6人).
对组的分配必须是随机的,并且可以使用所需的组大小的任意组合,因为如果不使用组类别则无关紧要(例如,如果归属类型A的207组仅包含2,3,则会没有问题.或一次4人,或另外5人和7人).
我想象一个看起来像这样的输出:
GroupSize <- c(2:7)
Num.Groups <- 0
Num.People <- 0
HouseTypeA <- data.frame(GroupSize, Num.Groups, Num.People)
GroupSize <- c(2:6)
HouseTypeB <- data.frame(GroupSize, Num.Groups, Num.People)
Run Code Online (Sandbox Code Playgroud)
将'Num.Groups'列汇总为207或408,两个数据帧之间的'Num.People'之和为1524.
我有一些不等式{x,y}
,满足以下等式:
x>=0
y>=0
f(x,y)=x^2+y^2>=100
g(x,y)=x^2+y^2<=200
Run Code Online (Sandbox Code Playgroud)
需要注意的是x
和y
必须是整数.
在图形上它可以表示如下,蓝色区域是满足上述不等式的区域:
现在的问题是,Matlab中是否有任何函数可以找到每个可接受的对{x,y}
?如果有算法来做这种事情,我也很高兴听到它.
当然,我们总能使用的一种方法是强力方法,我们测试每种可能的组合,{x,y}
以查看是否满足不等式.但这是最后的手段,因为它耗费时间.我正在寻找一个聪明的算法来做到这一点,或者在最好的情况下,我可以直接使用现有的库.
这x^2+y^2>=100
and x^2+y^2<=200
只是例子; 在现实中f
,g
可以是任何程度的任何多项式函数.
编辑:C#代码也受到欢迎.
c# matlab mathematical-optimization linear-programming nonlinear-optimization