![]() |
1. Заголовок темы должен быть информативным. В противном случае тема закрывается и удаляется ...
2. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
3. Одна тема - один вопрос (задача)
4. Спрашивайте и отвечайте четко и по существу!!!
![]() |
zandryukha |
![]()
Сообщение
#1
|
Гость ![]() |
Практическая не совсем транспортная задача
Некоторый однородный продукт, сосредоточенный у m поставщиков Ai в количестве ai (i=1,2,3,...,m) единиц соответственно, необходимо доставить n потребителям Bj в количестве bj (j=1,2,3,...,n) единиц. Необходимо составить план перевозок, позволяющий вывезти все грузы, полностью удовлетворить Cij xij потребности. Если в транспортной задаче известна цена Cij перевозки единицы груза от i-го поставщика к j-му потребителю, а целью является минимизация стоимости, то в нашем проблемном случае известна собственно стоимость (с целью задания приоритетности маршрутов), а минимизировать необходимо количество перевозок. Подскажите, есть ли методика решения данной задачи, и соответствующее программное обеспечение. |
![]() ![]() |
Atos |
![]()
Сообщение
#2
|
![]() Прогрессор ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 602 Пол: Мужской Реальное имя: Михаил Репутация: ![]() ![]() ![]() |
Цитата в нашем проблемном случае известна собственно стоимость (с целью задания приоритетности маршрутов) Это как? если надо минимизировать только количество перевозок, то стоимость вообще ни на что влиять не будет. Объясни подробнее... и что будет считаться одной перевозкой? перевозка любого количество груза между двумя конкретными пунктами?Был у меня какой-то софт по оптимизационным задачам.. надо посмотреть... в принципе, если известен алгоритм, то можно и самостоятельно набросать код... а численно находить значение минимума для подобных задач по заданной системой уравнений можно и в MathCad'e |
Гость |
![]()
Сообщение
#3
|
Гость ![]() |
[quote name='Atos' date='28.02.2006 14:40' post='62974']
Это как? если надо минимизировать только количество перевозок, то стоимость вообще ни на что влиять не будет. Объясни подробнее... и что будет считаться одной перевозкой? перевозка любого количество груза между двумя конкретными пунктами? Вы поняли абсолютно верно: минимизируется только количество перевозок, а стоимость предполагается использовать для выбора приоритета, т.е. потребность определенных потребителей необходимо удовлетворить именно за счет определенных других, а уж если у них запасов не хватит, тогда за счет прочих. Одной перевозкой считается перевозка любого количество груза между двумя конкретными пунктами. |
zandryukha |
![]()
Сообщение
#4
|
Гость ![]() |
Был у меня какой-то софт по оптимизационным задачам.. надо посмотреть... в принципе, если известен алгоритм, то можно и самостоятельно набросать код... а численно находить значение минимума для подобных задач по заданной системой уравнений можно и в MathCad'e Алгоритм то как раз и не известен... Но проблему бы решил и сторонний Soft, в который можно загрузить и выгрузить массив данных через текст. Подскажите, решение, экспорт и импорт возможны в MathCad'e? Если да, то отправляюсь разбираться, если - скорее нет, то надеюсь на Вашу помощь/софт. |
Atos |
![]()
Сообщение
#5
|
![]() Прогрессор ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 602 Пол: Мужской Реальное имя: Михаил Репутация: ![]() ![]() ![]() |
В MathCad'e-то я не силён...
![]() Цитата то надеюсь на Вашу помощь/софт. хорошо, посмотрю... подумаю... Так навскидку кажется, что алгоритм должен быть проще, чем у обычной транспортной задачи...Сообщение отредактировано: Atos - 28.02.2006 15:24 |
zandryukha |
![]()
Сообщение
#6
|
Гость ![]() |
хорошо, посмотрю... подумаю... Результаты моих экспериментов по данному вопрому: если загнать данные в ПО, решающее задачу по "венгерскому" методу, поставив в таблицу стоимости "1" - в приоритетные маршруты, и значение - большее максимальной стоимости в прочие клетки (ну чтобы показать машине - где выгоднее), то результат иногда получается оптимальным. Хотя исходный массив данных большой - могу и ошибаться... |
Atos |
![]()
Сообщение
#7
|
![]() Прогрессор ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 602 Пол: Мужской Реальное имя: Михаил Репутация: ![]() ![]() ![]() |
из софта есть библиотечка GTL... не знаю, будет ли там что-то подходящее, я практически не смотрел, мне её, в общем-то случайно скинули вместе с лекциями по МО. Установщик чуть больше 2 Мб. zandryukha, напиши емейл, скину.
|
zandryukha |
![]()
Сообщение
#8
|
Гость ![]() |
|
zandryukha |
![]()
Сообщение
#9
|
Гость ![]() |
и удали, пожалуйста, e-mail с форума...
|
Atos |
![]()
Сообщение
#10
|
![]() Прогрессор ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 602 Пол: Мужской Реальное имя: Михаил Репутация: ![]() ![]() ![]() |
Сделано
|
Atos |
![]()
Сообщение
#11
|
![]() Прогрессор ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 602 Пол: Мужской Реальное имя: Михаил Репутация: ![]() ![]() ![]() |
По поводу алгоритма подуал и вот к каким пришёл выводам. В "Не совсем транспортная задача" можно использовать жадный алгоритм - нужно, конечно, ещё строго обосновать его корректность, но ,интуитивно, скорее всего он будет действовать правильно.
Делаем так. Упорядочиваем все значения потребностей и запасов. Если какая-то потребность будет равна какому-то запасу, то соединяем эти пункты и исключаем из дальнейшего рассмотрения. Шаг итерации. Берём максимум значений (обзначим А), и соединяем этот пункт с пунктом из противоположного множества, имеющего максимальное значение(Обозначим Б). То есть если максимальное значение(среди всехзначений и запасов, и потребностей) у какой-то потребности, то соединяем с пунктом, в котором запасы максимальны, и наоборот. Пункт Б исключаем из рассмотрения(его запасы либо потребности полностью исчерпаны), а запасы либо потребности А уменьшились, значит, бинарным поиском определяем его новое место в упорядоченном массиве всех значений. И сразу же проверяем, нет ли пункта из противоположного множества с таким же значением. Если есть, соединяем из и исключаем. Конец итерации. Трудоёмкость можно ограничить сверху logN+log(N-1)+...+1 = log(N!), где N - общее количество всех пунктов |
zandryukha |
![]()
Сообщение
#12
|
Гость ![]() |
|
zandryukha |
![]()
Сообщение
#13
|
Гость ![]() |
По поводу алгоритма... Другая проблемка с алгоритмом - посерьезней ранжирования. Выбирая каждый раз максимум, мы "уверены", что не существует других нескольких значений (чуть поменьше), которые в сумме сразу закрывают потребность, что "экономит" в итоге одну итерацию. В этом части "жадный" алгоритм в эквивалентен "минималистскому", т.е. мы можем отбирать и перекрывать и минимальные пары потребностей-ресурсов с тем же успехом. Кстати, именно с такого алгоритма я и начал. Таким образом, алгоритм необходимо "надстроить" полным перебором сочетаний для проверки, дают ли они сумму потребностей/избытка. При этом, откуда бы мы ни начали (хоть - с минимума, хоть - с максимума) , это не гарантирует оптмальности, что приводит к необходимости простого тотального перебора ВСЕХ вариантов. Этого, поначалу, я и хотел избежать, хотя теперь уже согласен и на такой подход... |
zandryukha |
![]()
Сообщение
#14
|
Гость ![]() |
По поводу алгоритма... И всё-таки о венгерском методе для транспортной задачи. Там на одном из этапов в каждой итерации, мне кажется, возможно заменить стоимость частным, чтобы прийти к моей формулировке, при которой известны стоимости, а не цены. Помогите с исходниками для венгерского метода (Basic, Pascal, С++, да хоть подробная блок-схема), потому-что писать всё целиком - немалая работа. |
volvo |
![]()
Сообщение
#15
|
Гость ![]() |
Цитата(zandryukha @ 3.03.2006 11:08) Помогите с исходниками для венгерского метода (Basic, Pascal, С++, да хоть подробная блок-схема) Здесь было: МИО 2004 (смотри версию Alpha 4) |
zandryukha |
![]()
Сообщение
#16
|
Гость ![]() |
|
Atos |
![]()
Сообщение
#17
|
![]() Прогрессор ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 602 Пол: Мужской Реальное имя: Михаил Репутация: ![]() ![]() ![]() |
Цитата Только вот с ранжированиеим приоритетов "запас-источник" - пока не понятно просто все значения отсортировываем по порядку в один массив - и запасы, и потребности.Цитата которые в сумме сразу закрывают потребность, что "экономит" в итоге одну итерацию. Э-э... не думаю.Цитата т.е. мы можем отбирать и перекрывать и минимальные пары потребностей-ресурсов с тем же успехом. нет. То есть, в худшем случае, да, но не забывай, что , после уменьшения значения Б, ему может найтись "комплементарная пара", что позволит исключить сразу ещё два пункта. Если действовать с минимумами, то вероятность этого меньше, а во многих случаях равна нулю.Цитата При этом, откуда бы мы ни начали (хоть - с минимума, хоть - с максимума) , это не гарантирует оптмальности, По-моему, всё-таки гарантирует. Попробую это строго доказать.Всё-таки получше простестируй венгерский алгоритм, если не уверен, что он для всех задач действует корректно. Кстати, жадный алгоритм реализуется очень легко. Если надо, могу сделать на Паскале. |
zandryukha |
![]()
Сообщение
#18
|
Гость ![]() |
Э-э... не думаю. нет. То есть, в худшем случае, да, но не забывай, что , после уменьшения значения Б, ему может найтись "комплементарная пара", что позволит исключить сразу ещё два пункта. Если действовать с минимумами, то вероятность этого меньше, а во многих случаях равна нулю. Видимо у меня - действительно худший случай. Правда я закрывал минимумы, но на матрице 11x17 - у меня в избытке оказались две итерации. Надеюсь, что текст проги с венгерским методом все-же удасться найти... Ну а если не удасться, вернусь к "жадному" алгоритму. |
![]() ![]() |
![]() |
Текстовая версия | 26.07.2025 11:09 |