簡體   English   中英

C#中的優化算法

[英]Optimization Algorithm in C#

我有一個優化問題,我不確定從這里出發。 我有一個程序試圖找到返回最高預測r平方值的輸入的最佳組合。 問題是我總共有21個輸入(列表),並且需要一組15個輸入。 總組合的公式為:

N! / r!(n-r)! = 21! / 15!(21-15)! = 54,264種可能的組合

因此很顯然,遍歷每種組合並計算預測的rsquared都不是理想的解決方案,因此是否有更好的方法/算法/方法可以用來嘗試跳過或縮小不良組合,因此我只處理了最少的組合? 這是我當前針對此問題的偽代碼:

public BestCombo GetBestCombo(List<List<MultipleRegressionInfo>> combosList)
{
   BestCombo bestCombo = new BestCombo();

   foreach (var combo in combosList)
   {
      var predRsquared = CalculatePredictedRSquared(combo);

      if (predRsquared > bestCombo.predRSquared)
      {
         bestCombo.predRSquared = predRsquared;
         bestCombo.BestRSquaredCombo = combo;
      }
   }

   return bestCombo;
}

public class BestCombo
    {
        public double predRSquared { get; set; }
        public IEnumerable<MultipleRegressionInfo> BestRSquaredCombo { get; set; }
    }

public class MultipleRegressionInfo
{
    public List<double> input { get; set; }
    public List<double> output { get; set; }
}

public double CalculatePredictedRSquared(List<MultipleRegressionInfo> combo)
{
    Matrix<double> matrix = BuildMatrix(combo.Select(i => i.input).ToArray());
    Vector<double> vector = BuildVector(combo.ElementAt(0).output);
    var coefficients = CalculateWithQR(matrix, vector);
    var y = CalculateYIntercept(coefficients, input, output);
    var estimateList = CalculateEstimates(coefficients, y, input, output);
    return GetPredRsquared(estimateList, output);
}

54,264對於一台計算機而言並不是很大-值得安排一些調用來計算R ^ 2並相乘以了解這將花費多長時間。

對於此類問題,存在分支定界算法,它依賴於以下事實:R ^ 2(A,B,C)> = R ^ 2(A,B)-僅當您刪除一個變量。 遞歸搜索所有大小至少為15的變量集的空間。在為一組變量計算R ^ 2之后,對通過從集合中刪除單個變量而產生的集合進行遞歸調用,其中任何這樣的丟棄都必須降到保留現有間隙的權利(因此A.CDE會產生A..DE,ACE和A.CD,但不會產生..CDE,這將由.BCDE產生)。 當您降低到所需的集合大小時,或者當您發現R ^ 2並不比目前的最佳答案更好時,您可以終止遞歸。

如果碰巧您經常發現R ^ 2值並不比目前的最佳答案更好,這將節省時間-但這不能保證。 您可以嘗試通過選擇首先調查具有最高R ^ 2的集合來提高效率,希望您找到一個新的最佳答案,足以在遇到它們之前排除它們的同胞,並使用一個過程來計算A.CDE的R ^ 2利用您已經對ABCDE進行的計算。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM