#math #physics #linear-programming #physics-engine
Вопрос:
В настоящее время у меня возникла проблема с новым проектом, потому что мне нужно решение для LCP. Я знаю, что есть алгоритмы, такие как Лемке и т. Д. Но каждый из них, похоже, написан на C или Python(с использованием numpy).
Я действительно не в состоянии реализовать алгоритм самостоятельно, потому что я не совсем знаком со всей математикой, лежащей в его основе.
Поэтому мой вопрос в том, есть ли какой-либо решатель LCP для Java, который я могу просто использовать, вызвав что-то вроде
SolveLCP(Matrix M, Vector q, Vector w, Vector z)
для вычисления w и z из M и q ?
Я нашел алгоритм в
https://www.geometrictools.com/GTE/Mathematics/LCPSolver.h
который, кажется, работает довольно хорошо, но, к сожалению, это C , и мне не удалось преобразовать его в java(на самом деле я использую kotlin). Моя версия иногда дает правильные результаты, но не каждый раз по сравнению с реализацией C .
Я реализовал его в котлине, вы можете найти его здесь:
https://github.com/mihisg/LCPSolver_Kotlin/tree/main
Я был бы очень признателен, если бы кто-нибудь мог помочь найти ошибки. Я думаю, что сделал что-то не так с представлением всех этих указателей, но на самом деле это работает только иногда.
Комментарии:
1. Вы могли бы использовать QP-решатель.
2. Хорошая идея, спасибо. Но я тоже не могу его найти. У вас есть рабочий на java?
3. Google находит их целую тонну. Как коммерческие, с открытым исходным кодом, так и простые студенческие проекты.
4. Вы рекомендуете какой-то конкретный вариант? Как я могу сформулировать LCP как QP?
5. Хорошими решателями QP являются Cplex, Gurobi и Mosek. Как сформулировать LCP как QP, очень стандартно и даже показано здесь: en.wikipedia.org/wiki/Linear_complementarity_problem . Немного чтения-это долгий путь.