2015-12-04 1 views
0

Использование OpenSolver, я пытаюсь решить основную assignment problem для размера задачи 1000.Как повысить эффективность при использовании матрицы 1000x1000 в Excel?

Так Excel файл имеет матрицу 1000x1000. Каждое значение внутри матрицы может быть либо 0, либо 1.

Решение проблемы образца занимает более 10 часов, и есть +100 образцов. Но у меня есть одна неделя, чтобы закончить все это.

Я подозреваю, что основная причина неэффективности вызвана матрицей и тем, как Excel ее обрабатывает.

Есть ли способ ускорить процесс? Есть идеи?

Любая помощь приветствуется! Спасибо.

+1

трудно сказать, не увидев или не проверив, отключит ли автоматическую калькуляцию? – WhiteHat

+0

Используйте язык программирования C, C++ или Javato, реализующий алгоритм, который вы хотите, это будет быстрее. – 11thdimension

+1

Я согласен с WhiteHat, очень сложно сделать информированное предложение без дополнительной информации. Какие скрипты вы используете? Когда вы упоминаете матрицу, это означает значения в ячейках? Если вместо этого использовать вместо переменных вместо хранения свою матрицу, поскольку операции чтения записи в ячейки требуют большей вычислительной мощности, чем сохранение ее в переменной. Но больше деталей было бы лучше. – nbayly

ответ

1

Я согласен, что это, вероятно, связано с временем получения данных в Excel и из него. Время решения задачи назначения такого размера должно составлять не более нескольких минут. См. here для некоторых таймингов. Проблема не очень мала: 1000 x 1000 означает 2k уравнений и 1e6 переменных. Однако проблема назначения имеет простую структуру и решает очень быстро. Кажется, вы хотите запустить несколько наборов данных в строке, так что это скорее пакетная операция, чем интерактивная задача.

Простым подходом было бы написать немного кода, который генерирует LP-файл для набора данных, а затем подает его в решатель (это будет решатель общественного домена, например CBC, GLPK). Затем создайте пакетный файл, который проходит через все наборы данных.

0

Эти ячейки 1000 x 1000 состоят из ссылок и ссылок. Или у вас есть сценарий, пишущий эти 1 и 0? Рабочая книга замедлит сканирование, если вы обновляете 1000 x 1000 ссылок. Пожалуйста, сделайте копию> вставить специальные> значения, если это возможно, поэтому Workbook не постоянно обновляется.

Также см. Это.

http://datapigtechnologies.com/blog/index.php/ten-things-you-can-do-to-speed-up-your-excel-vba-code/

0

Матрица 1000x1000. Каждое значение внутри матрицы может быть либо 0, либо 1.

Решение является математическим. Попытайтесь найти блок-диагональную структуру и диагонализировать каждый блок. Это очень трудная проблема.

http://mathworld.wolfram.com/BlockDiagonalMatrix.html

+0

Хотя эта ссылка может ответить на вопрос, лучше включить здесь основные части ответа и предоставить ссылку для справки. Ответные ссылки могут стать недействительными, если связанная страница изменится. – Marusyk

+0

Задачи назначения на самом деле не очень сложны. Проблемы такого размера решаются менее чем за несколько минут. –

0

Если вам нравится OpenSolver и сроднились с ним, попробуйте вариант QuickSolve. Он может или не может применяться к вам в зависимости от изменений последующих 100 оптимизаций. OpenSolver обычно медленно настраивает проблему, но если большинство из 10 часов потрачено на инициализацию модели, может быть остальная часть из 100 оптимизаций может быть решена за несколько минут. Вы даже можете получить VBA для этого.
Или вы можете сделать шаг вперед и попробовать SolverStudio.

Смежные вопросы