2011-09-30 30 views
7

Estoy tratando de resolver algunas ecuaciones simples en .NET. Me encontré con Math.NET y lo evalúo. Los métodos Solver() parecían ser lo que necesitaba, pero no puedo descifrar cómo usar las condiciones secundarias con este método.Resolviendo ecuaciones en .NET

Para ilustrar mi problema te daré un ejemplo:

Given: 
0 <= a_i <= 100 
0 <= b <= 100 
0 <= c 
a_i, b and c are given 

x_1, ..., x_n should be optimized 

f(x) = x_1*a_1 + x_2*a_2 + ... + x_n*a_n = b 

Side conditions: 
g(x) = x_1 + x_2 + ... + x_n = c 
0 <= x_i 

¿Es posible resolver dicho problema utilizando el método de resolver o cualquier otro componente de Math.NET o conoce a ninguna (libre para uso comercial) .NET biblioteca que se puede utilizar para resolver esto? No me gustaría escribir un algoritmo para un problema tan común por mi cuenta.

Saludos & gracias de antemano

+0

posible duplicado de [Biblioteca de optimización gratuita en C#] (http://stackoverflow.com/questions/1211201/free-optimization-library-in-c) – duffymo

Respuesta

1

Necesita un optimizador con restricciones como el método simplex o la optimización no lineal Marquardt.

+0

el problema parece bastante lineal para mí;) - desde el libro, Simplex o puntos interiores están bien para esto, pero ¿es esto realmente una respuesta? – Carsten

+0

No puede encontrar lo que está buscando a menos que sepa su nombre. – duffymo

+0

Finalmente decidí portar mi Simplex que escribí una vez en la universidad a NET, funciona bien :) – Jay

2

ALGLIB es ideal para estas tareas. Echa un vistazo a su página en constrained optimization.

EDIT: Tiene una licencia libre (GPL) y una licencia comercial desde $ 370.

+0

gracias - no lo he comprobado durante algún tiempo - + 1 para el recordatorio;) – Carsten

2

IMHO Microsoft Solver Foundation es el camino a seguir para esto. La versión Express es gratuita AFAIK y lo suficientemente potente para la mayoría de las aplicaciones más pequeñas.

Como veo ahora, la versión Express solo está sangrada para exploración, pero hay (¿ahora?) Una lib estándar para suscriptores de MSDN, así que no elimino esta publicación todavía, ya que podría tener una suscripción a MSDN.