Вот реализация one , но независимо от того, за что вы находитесь, невозможно сказать, потому что вы не указали, что, по вашему мнению, ответ должен быть :
let answer = zip(array1, array2).map {$0.0 == $0.1}
Это дает вам список значений Bool, true
, если ответ соответствует правильному ответу, false
, если это не так.
Но скажем, что вы хотели был списком индексов тех ответов, которые являются правильными. Затем вы можете сказать:
let answer = zip(array1, array2).enumerated().filter() {
$1.0 == $1.1
}.map{$0.0}
Если вы хотите, чтобы список индексов тех ответов, которые не правильные, просто измените ==
на !=
.
Я лично нашел GLPK лучше (т.е. быстрее), чем LP_SOLVE. Это поддерживает различные форматы файлов, и дальнейшим преимуществом является свой интерфейс библиотеки, который позволяет беспрепятственную интеграцию с Вашим приложением.
Вы попробовали lp_solve
? Были также некоторые другие предложения в следующих вопросах для Java:
Я рекомендую проверить проект COIN. COIN OR
Здесь много хороших решателей, включая ipOPT для нелинейных задач и пара решатели смешанных целых чисел.
100k переменных - большая проблема. Многие библиотеки с открытым исходным кодом плохо работают с таким количеством переменных. Из того, что я читал, lp_solve был протестирован только для 30k переменных. Единственным выбором может быть использование коммерческой системы.
Еще одно подтверждение для COIN-OR . Мы обнаружили, что компонент линейного оптимизатора (Clp) был очень сильным, а смешанный целочисленный компонент (Cbc) можно было довольно хорошо настроить с помощью некоторого анализа. Мы сравнили LP-Solve и GLPK.
Для действительно сложных задач подходящим решением является коммерческое решение.
Не с открытым исходным кодом, но если у вас есть лицензия Microsoft Academic Alliance, включается корпоративная версия Microsoft Solver Foundation (MSF). Gurobi также бесплатен для академических целей, я использовал его в своих диссертационных исследованиях.