2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 [MS Excel] Линейное программирование и условие "если - то"
Сообщение21.08.2015, 20:37 
Аватара пользователя
Здравствуйте!

Для решения некоей задачи - расчёта плана формирования ускоренных грузовых поездов - использовал линейное программирование и программу LP solve. В принципе всё то же самое можно сделать в Excel.

В первом приближении задача решается - она несложная. Но когда встал вопрос о том, чтобы компьютер производил более "глубокий" расчёт, то оказалось что в процессе решения задачи необходима постановка условий "если - то".

Конкретно это выглядит так:
1) Если в составе поезда будут однотипные вагоны - то будет одно
2) Если в составе поезда будут вагоны 2 и более типов - то другое

Как это задать в программе не знаю - в этом и моя просьба о помощи - с помощью какого инструмента/программы можно решить такую задачу.
Рассуждения от себя: можно ли это сделать в Excel используя его функции "если"? Но тогда и линейное программирование, наверно, не сработает - оно же линейное.

Помогите пожалуйста 8-)

 
 
 
 Re: Линейное программирование и условие "если - то"
Сообщение21.08.2015, 21:09 
Mihak в сообщении #1046835 писал(а):
Рассуждения от себя: можно ли это сделать в Excel используя его функции "если"?
Это гораздо проще попробовать, чем ждать ответа от форума. Если кратко - то да, эксель - мощный инструмент, исчерпать его возможности непросто.

 
 
 
 Re: Линейное программирование и условие "если - то"
Сообщение22.08.2015, 02:45 
Эксель, подозреваю, решает задачу мощным перебором. Если так, то да, проще попробовать. Если же стоит именно задача линейного программирования, то нужно разбить на две и сравнить результаты. Конкретнее сказать можно только при более конкретной постановке задачи.

 
 
 
 Re: Линейное программирование и условие "если - то"
Сообщение22.08.2015, 07:35 
Вряд ли Эксель полноценно способен решать задачи CP (Constraint Programming). Проще освоить LocalSolver, MiniZinc, AMPL.

 
 
 
 Re: Линейное программирование и условие "если - то"
Сообщение22.08.2015, 13:30 
iifat в сообщении #1046897 писал(а):
Эксель, подозреваю, решает задачу мощным перебором...

Ну, вообще-то в Excel есть численные методы. Линейное программирование (в том числе, частично-целочисленное)там уже лет 20 как есть. Раньше оно было в меню "Поиск решения".

Mihak в сообщении #1046835 писал(а):
...
Как это задать в программе не знаю - в этом и моя просьба о помощи - с помощью какого инструмента/программы можно решить такую задачу.
Рассуждения от себя: можно ли это сделать в Excel используя его функции "если"? Но тогда и линейное программирование, наверно, не сработает - оно же линейное.
Помогите пожалуйста 8-)

Нужно выложить полную постановку задачи. Есть множество хитростей, связанных в целочисленными переменными, которые часто позволяют преобразовывать "нелинейные условия" в как бы "линейные", т.к. приводить к такому виду, чтобы решатели линейных задач могли их съесть.

 
 
 
 Re: [MS Excel] Линейное программирование и условие "если - то"
Сообщение27.08.2015, 11:30 
Аватара пользователя
Всем спасибо за советы. По Excel понял.

Насчёт постановки - попробую раскрыть суть вопроса.

Как я уже сказал смысл задачи в расчёте плана формирования ускоренных грузовых поездов (далее просто "поездов") и определения схем их составов с учетом обеспечения бесперегрузочного освоения грузопотоков, сегментированных по типам грузовых мест.

Под "грузопотоком" понимается заданный объём грузов, следующий по определённому маршруту, например из Санкт-Петербурга в Москву или, как будет употреблено далее «грузопоток такой то корреспонденции». Для простоты взято 3 города – А, В и С.

Так как мы принимаем в задаче, что все грузы должны доставляться без перегрузки, то в соответствии с заданными городами получится три «назначения» поездов:
Назначение 1 от А до С
Назначение 2 от А до В
Назначение 3 от В до С.

Под "схемой (композицией) поезда" понимается, что поезд может состоять, как из однотипных вагонов – например, платформ - так и из вагонов разных типов - для простой задачи возьмём крытые вагоны и платформы. В задаче задано, что для каждого назначения поезда может быть определено (рассчитано) по 3 различных схемы (композиции). Выходит, что в задаче может быть до 9 композиций поездов. Да, длина состава фиксированная, порядок цифр 20-30 вагонов.

Под "типом грузового места" понимается, что в вагоне существует определённое пространство, куда может быть погружен груз в таре определённого типоразмера. Например, на платформу длиной 40 футов можно погрузить груз в одном контейнере длиной 40 футов, следовательно, в данном вагоне есть одно «грузовое место» для 40-футового контейнера и соответственно, если в поезд поставить таких платформ, то в поезде будет такое-то число мест для 40-футовых контейнеров. Для нашей задачи принято, что есть крытые вагоны и платформы, а в них грузовые места для пакетированных грузов и контейнеров соответственно. Соответственно в задаче фигурируют грузопотоки из грузов в контейнерах и из пакетированных грузов.

Размещаю ссылку на архив:
word-файл с описанием уравнений и переменных и lp-файл, который можно решить и получить результат; также .xls с проверкой результатов, но (пока) без пояснений.
https://yadi.sk/d/1Inxj2-xigpNd

По результатам:
Программа всё посчитала «просто» - получилось определённое число поездов за заданный временной период (месяц) по 3 назначениям. Для каждого назначения получилась одна своя композиция. Во всех случаях композиции получились «двойные» из вагонов-платформ и крытых вагонов.
И мне понятно, что при изменении исходных данных или усложнении задачи, так будет всегда – всегда будут поезда с композициями из двух типов вагонов одновременно. В жизни же наоборот предпочтительней, чтобы композиции поездов состояли из вагонов одного типа, но в текущей задаче это никак не задано.
Первопричина предпочтительности однородных композиций это терминальное обслуживание, но это может быть как простое жёсткое условие – поезда из вагонов только одного типа, без учёта каких либо дополнительных денежных затрат. Но даже если и задать дополнительные денежные затраты – то как их поместить в целевую функцию? Как программа будет знать композиция состоит из одного типа вагонов или из более чем одного?
В принципе, можно бы вообще отказаться от композиций – пусть все поезда будут из одного типа вагонов. Тогда задача сразу упрощается, но тогда и снижается её ценность в рамках моей диссертации.
Почему могут потребоваться двойные композиции – первопричина это частота обращения поезда по заданному маршруту. При однородной композиции частота может оказаться слишком низкой для того, чтобы поезд был востребован клиентами. Если собрать поезд из вагонов разных типов, а значит и перевезти грузы разных типов, то частота обращения таким путём будет повышена. Это при фиксированной длине состава.

Получается, что мы должны дополнительно учесть то что:
1) терминалы преимущественно специализированные;
2) композиции в целом несколько усложняют технологию, но я так с ходу даже не знаю, как это посчитать в деньгах;
3) с точки зрения конкурентоспособности может быть задана минимальная частота обращения поездов – пусть 21 раз в месяц (5 раз в неделю).

Рассмотрю разные варианты разрешения, пусть будет реализовано хотя бы частично.

Спасибо!

 
 
 
 Re: [MS Excel] Линейное программирование и условие "если - то"
Сообщение27.08.2015, 13:29 
Посмотрел. Не понял. То ли потерялись формулы (у меня дома OpenOffice), то ли их и не было (судя по тому, что часть таки видна).

 
 
 
 Re: [MS Excel] Линейное программирование и условие "если - то"
Сообщение27.08.2015, 15:42 
Аватара пользователя
Поправил это дело - закатал в .doc формат, теперь формулы отображаются картинками - https://yadi.sk/i/DyLlGyrqihCwd
на всякий случай и в PDF закатал - https://yadi.sk/i/cSMXLHc4ihD6R

P. S. оффтоп. работаю в Word 2010, формулы были набраны в формате Word 2007, но изначально файл не мой. Также хочу отметить, что при простом закатывании в PDF .docx-файла формулы передались некорректно.

 
 
 
 Re: [MS Excel] Линейное программирование и условие "если - то"
Сообщение28.08.2015, 16:32 
Аватара пользователя
Начал думать в Excel - не понимаю как можно запихать функцию "ЕСЛИ" в линейное программирование?
По мне выходит:
1) считаем число поездов для однородных композиций - это типовая задача для линейного программирования
2) проверяем результаты на заданное условие - минимальная частота обращения поездов 21 раз в неделю
3) считаем второй этап, в котором пытаемся рассчитать композиции поездов из двух (и более) типов вагонов, чтобы увеличить частоту обращения поездов.

 
 
 
 Re: [MS Excel] Линейное программирование и условие "если - то"
Сообщение17.10.2016, 16:05 
Mihak

Привет!

Можешь скинуть excel файл с моделью. Очень нужно.

Спасибо

 
 
 
 Re: [MS Excel] Линейное программирование и условие "если - то"
Сообщение18.10.2016, 20:01 
Аватара пользователя
Написал Вам личное сообщение. Пожалуйста уточните, что именно Вам нужно и в каком виде.

 
 
 [ Сообщений: 11 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group