约束生成随机整数

时间:2014-05-20 16:59:13

标签: algorithm random constraints

我有一些整数数组,我随机生成,例如0到9之间 我有一组约束,我需要应用于这一代。

例如:
1)约束1 - >数组中偶数位置的数字应为0或1 2)约束2 - >数组应该在偶数值上至少有一个0和至少一个1 等...

我现在要做的是:
我随机生成数字数组 然后对于每个偶数位置,我在0和1之间随机选择 然后我检查每个偶数值,我至少有一个0和至少一个1.如果没有,我用上面的约束重新计算所有值(然后对于每个偶数位置,我在0和1之间随机选取)直到我有一些有用的东西(在做) 但是,这很好用,因为这些是非常简单的约束。

3)约束3 - >数字之间的差异总和应优于某个值。

等等...... 我遇到的问题是它是依赖于内部的约束问题,我不想封装do在另一个do while等等...当我添加一个约束时。

以最干净的方式实现这一目标的正确方法是什么?

编辑:

我意识到我一点都不清楚......我道歉。 我编辑了约束以便于理解。

我的代码看起来像那样(在记事本上键入++可能是错误的):

        std::vector<int> myVector;
        int N = 100; // vector contains 100 values
        do{
            myVector.clear();
            for(int i=0;i<N;i++){
                if(i%2==0){
                    myVector.push_back(rand() % 2);
                }
                else{
                    myVector.push_back(rand() % 10);
                }
            }
        }while(!doesContains0and1(myVector));

     bool MyClass::doesContains0and1(std::vector<int> avector)
    {
        bool returnVal = true;
        for(int i=0;i<avector.size;i++){
          if(i%2==0){
            if(!avector.contains(0) || !avector.contains(1){
                returnVal = false;
            }
          }
        }
     return returnVal;
}

3)约束意味着,如果我有例如:

0 5 1 7 0 9 0 1 1

对abs(5-0)+ abs(1-5)+ abs(7-1)+ ...等有限制&gt;某个值

这些约束是示例,我更需要一些方法而不是纯代码:)

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

让我来看看......

int sum;
for (int i = 0 ; i < array_size ; i++){

    if (!(i % 10)) sum = 0; // resets the sum to 0

    if(i % 2){ //even or odd
        //odd
        sum += array[i] = rand() % 2; // 1 or 0
        if ((!(i % 10)) && (sum == 0 || sum == 5)) 
            array[i] = sum?0:1;

    }else{
        //even
        array[i] = rand();

    }
}

这遵循前两个约束。总和将计算每个子集10中的1的数量。所有0将产生0的总和,并且所有1将产生5的总和。它将相应地设置最后一个元素。

我不确定如何解释第三个约束,但希望这可以让你开始