Реализация LCP(линейной дополнительной задачи) в Java

#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 . Немного чтения-это долгий путь.