Я пытаюсь реализовать алгоритм на С #, в котором есть математическая функция, например:

Минимизировать a || xu (i) - ∑j aj (i) bj || 2 + β || а (я) || 1

Но я не уверен, есть ли какой-либо прямой метод оптимизации в C #, и я ничего не нашел на форумах, или, может быть, вы можете предложить какие-либо предложения по решению этой проблемы оптимизации на C #!?

1
Far 25 Авг 2012 в 12:09
2
(i) Вы ищете решатель с интерфейсом C # / привязкой C #. (ii) Мне понятен первый член вашей функции (метод наименьших квадратов). Я не понимаю термин, начинающийся с бета. Не могли бы вы это объяснить? (iii) Если вам просто нужен метод наименьших квадратов, то не должно быть слишком сложно найти / связать конкретный решатель для этого. Если вам действительно нужна общая нелинейная оптимизация, я бы порекомендовал для этого IPOPT, но я считаю, что это будет будьте на грани излишества в вашем случае. Я понятия не имею, насколько хорош интерфейс C # IPOPT.
 – 
Ali
25 Авг 2012 в 14:55

1 ответ

Лучший ответ

Есть несколько решателей с привязками C #, которые могут подойти для вашей проблемы, например:

  • MS Solver Foundation, платформа Microsoft для математической оптимизации, которая предоставляет решения для большого количества задач, включая неограниченный и ограниченный наименьшие квадраты. Некоторые попытки вникнуть в API, но взамен производные вычисляются автоматически и т. Д.
  • ALGLIB предоставляет широкий спектр различных оптимизаторов и доступен в C #.
  • IPOPT упоминался в комментарии Али выше. Я разработал привязку C # к IPOPT, и ее можно загрузить здесь. Я, конечно, предвзято, но лично считаю, что API довольно прост. Если вы используете csipopt , вам необходимо вручную предоставить производные. (На самом деле существует также библиотека, которая включает csipopt и обеспечивает автоматические производные вычисления, Funclib .)
  • COBYLA2 (если у вас есть нелинейные ограничения) и BOBYQA (если у вас есть ограничения или нет ограничений) - это методы прямого поиска без производных, разработанные Майклом Пауэллом. Я перенес эти решатели на C #, 100% управляемый код. Проект C # COBYLA2 доступен здесь, а проект C # BOBYQA доступен здесь.
5
Anders Gustafsson 25 Авг 2012 в 18:22