在实践中使用C#来解决简单的二次优化问题

时间:2017-04-19 06:06:28

标签: c# optimization

enter image description here

要解决此类quadratic programming问题(mean-variance portfolio),我想在Microsoft.SolverFoundation中使用C#,但

中的介绍

https://msdn.microsoft.com/en-us/library/ff759370(v=vs.93).aspx

太抽象了,无法理解,任何人都可以给我一个特定的例子或其他我可以轻松处理的免费libaray吗?

我在这里使用accord.net

// Declare symbol variables
double x = 0, y = 0, z = 0;

// Create the function to be optimized
var f = new QuadraticObjectiveFunction(() => x * x - 2 * x * y + 3 * y * y + z * z - 4 * x - 5 * y - z);

// Create some constraints for the solution
var constraints = new List<LinearConstraint>();
constraints.Add(new LinearConstraint(f, () => 6 * x - 7 * y <= 8));
constraints.Add(new LinearConstraint(f, () => 9 * x + 1 * y <= 11));
constraints.Add(new LinearConstraint(f, () => 9 * x - y <= 11));
constraints.Add(new LinearConstraint(f, () => -z - y == 12));

// Create the Quadratic Programming solver
GoldfarbIdnani solver = new GoldfarbIdnani(f, constraints);

// Minimize the function
bool success = solver.Minimize();

double value = solver.Value;
double[] solutions = solver.Solution;

左边的问题是

  1. 如何将x,y,z作为向量x =(x_1,x_2,...,x_n)写入,因为我有很多变量(当然写目标函数作为矩阵的形式f = xMx&#39; )?
  2. 我是否可以linq query使用vector进入accord.net

2 个答案:

答案 0 :(得分:0)

不推荐使用Microsoft.SolverFoundation。

如果您需要在C#中使用,我建议使用Accord.Net。

答案 1 :(得分:-1)

您可以在以下链接中找到一些内容: http://crsouza.com/2012/04/05/quadratic-programming-in-c/

部分&#34;手动指定QP矩阵&#34;将是有用的