如何找到允许的最高变量组合?

时间:2013-05-15 16:24:21

标签: c#

我是一名新手程序员,正在寻找有关解决我的运输问题的最佳算法的建议。

所以我有12个变量(随着时间的推移而增加)。我想在那个时刻选择允许的最高变量组合。我有一个允许的12x12布尔矩阵的唯一组合。

例如, 变量1(V1)= 10秒,V2 = 20秒,V3 = 12秒等......但V1不能与V3或V7组合。 V2不能与V4,V7或V10等组合使用。

我应该使用什么算法来随时选择允许的最高变量组合?

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我认为这是一个直接的循环 - >最大的情况。 只需循环遍历每个组合 - 执行您需要的任何操作(v1 + v2) - 如果它高于最大值 - 将其设置为最大值。

最大化关于结构的一些假设:

var combinations = new bool[12,12];
var values = new int[12];

var max = 0;
var maxX = -1;
var maxY = -1;

//Loop across all combinations
for (int x = 0; x < 12; x++)
{
    for (int y = 0; y < 12; y++)
    {
        if(combinations[x,y]) //Check if it's a valid combination
        {
            if(values[x] + values[y] > max)
            {
                max = values[x] + values[y];
                maxX = x;
                maxY = y;
            }
        }
    }
}

编辑:

对于任意子集,这样的事情可能有用:

var combinations = new bool[12,12];
var values = new int[12];

var max = 0;

//Get all the other variables this variable can be combined with
for (int i = 0; i < 12; i++)
{
    var validCombinations = new List<int>(){ i };

    for (int k = 0; k < 12; k++)
    {
        if(combinations[i,k])
        {
            validCombinations.Add(k);
        }
    }

    //get the actual values for the variables, and sum them:
    var sum = validCombinations.Select(variable => values[variable]).Sum();

    if(sum > max)
    {
        max = sum;
    }
}