Как сгенерировать все возможные двоичные матрицы nxm, где сумма каждой строки равна 1

Я работаю над заданием, в котором мне нужно назначить от 1 до 10 распределительных центров для всех штатов США. Я сделал модель в excel, чтобы рассчитать все затраты, и ясно, что цель задания - найти самый дешевый способ. У меня есть 50 строк (для каждого состояния) и 10 столбцов (для всех возможных местоположений DC). Моя модель основана на этой матрице, и если я изменю матрицу, сразу отобразятся затраты. Единственным ограничением является то, что каждое состояние обеспечивается ровно 1 контроллером домена.

Понятно, что я не могу сделать все возможные комбинации вручную, я попытался перевести свою модель в программу оптимизации (AIMMS), но это займет много времени, потому что я уже вставил модель Excel. Я подумал, что если бы у меня были все возможные матрицы (сгенерированные в R, Matlab или Python, мне все равно), я мог бы просмотреть их в своей электронной таблице и позволить программе прочитать стоимость, чтобы определить лучший выбор. Теоретически все состояния можно передать по 1 DC, максимум 10, поэтому для определения наилучшей нужны все возможные матрицы 1x50, 2x50, 3x50 ... 10x50.

Короче говоря, можно ли сгенерировать каждую бинарную матрицу nxm с общей суммой 1 в каждой строке предпочтительно в R или иначе в Matlab или Python?

Почти все возможно с помощью языков программирования. Но я предполагаю, что это не вопрос настоящий, верно? В противном случае ответ будет просто «да». Однако это не услуга по написанию кода, мы помогаем вам решить ваши проблемы, для чего обычно требуется минимальный воспроизводимый пример. Подробнее читайте в Как спросить

Ander Biguri 29.05.2019 12:29

Так что это в основном Задача коммивояжера. Это нерешенная математическая проблема, но есть некий эвристический и вероятностный алгоритм, который может дать хороший результат.

obchardon 29.05.2019 13:07
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
2
142
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

TLDR: №.


Давайте рассмотрим самый простой пример: 2 СН. Ваши возможные строки будут:

  • (1,0)
  • (0,1)

Теперь вы хотите построить все возможные матрицы 2x50. Их количество 2^50 (2 возможных ряда в 50 рядах). Он равен:

1125899906842624

Предположим, что каждая матрица хранит 100 байт. Что все матрицы 2x50 будут хранить:

(2**50) * 100 / 1024 / 1024 / 1024 / 1024 = 102400 терабайт данных.

И на их обработку всех (в самых оптимистичных результатах для обычных компьютеров) уйдет время, равное:

(2**50) / 10**9 / 60 / 60 = 312 часов.

А 10х50 будет еще больше...

Я боялся чего-то подобного... спасибо за разъяснение. Думаю, мне придется изменить свой подход.

BillyBouw 29.05.2019 13:03

Другие вопросы по теме