Fox-kozí Zelí přeprava

hlasů
2

Moje otázka je o starém dopravního problému - nesoucí tři položky přes řeku s lodí pouze schopného tranferring jednu položku najednou. Přidržovací jsou některé položky nemohou být ponechány společně, jako je zelí s kozou, vlk s kozím atd Tento problém by měl být solveable pomocí celočíselné programování, nebo jiný přístup optimalizace. Nákladová funkce je všechny předměty, které budou na druhé straně řeky, a výlety potřebné se tam dostat může být výstup z Simplex (?), Který se snaží z různých proveditelná řešení. Napadlo mě, jestli někdo má celočíselné programování (nebo lineární programování) formulaci tohoto problému, a / nebo Matlab, Octave, Python založené kód, který může nabídnout řešení programově, včetně stopu Simplex vyzkoušet všechny možné způsoby - naše loď jezdí ,

Tam bylo několik zajímavých věcí zde

http://www.zib.de/Publications/Reports/SC-95-27.pdf

Dík,

Položena 15/11/2011 v 16:29
zdroj uživatelem
V jiných jazycích...                            


2 odpovědí

hlasů
1

Máte pravdu, že tato formulace bude vyžadovat celočíselné proměnné. Tradiční způsob řešení problému, jako by to bylo formulovat binární proměnnou modelu a předat formulace na metodu řešení. MATLAB v tomto případě nebude fungovat, pokud máte přístup k optimalizaci panelu.

http://www.mathworks.com/products/optimization/index.html

Ve vašem formulaci budete muset řešit následující:

rozhodovací proměnné

Ve vašem případě by to vypadat nějak takto:

x_it (zvolte [ano = 1 ne = 0] pro přepravu zboží i během plavba číslo t)

Objektivní funkce

Nejsem si jistý, co to je od vašeho popisu, ale tam by měla být cena, c_t, spojené s každým výlet lodí. Pokud chcete, aby se minimalizovalo celkové doby, každá cesta bude mít konstantní náklady 1. Takže vaším cílem by mělo vypadat nějak takto:

minimalizovat SUM ((i, t), c_t * x_it) (takže se minimalizovat celkové náklady přes všechny cesty)

omezení

To je choulostivé části pro váš problém. Komplikovat omezení je exkluzivita, kterou lze identifikovat. Nezapomeňte, že x_it je binární.

Pro každou dvojici bodů (i1, i2), které kolidují s vzájemně máte omezení, která vypadá takto

x_ (i1 t) + x_ (i2 t) <= 1

Například:

x _ ( "zelí" "1") + x _ ( "kozí" "1"), <= 1

x _ ( "vlk" "1") + x _ ( "kozí" "1"), <= 1

x _ ( "zelí" "2") + x _ ( "kozí" "2"), <= 1

x _ ( "vlk" "2") + x _ ( "kozí" "2"), <= 1

atd.

Vidíte, jak to zabrání konfliktu. Plán Loď, která přiřazuje „zelí“ a „koza“ do stejné cesty bude porušovat tento binární výlučnosti omezení, protože „1 + 1> 1“

Nástroje jako GAMS, AMPL a GLPK vám umožní vyjádřit tuto skupinu omezení velmi stručně.

Naděje, která pomáhá.

Odpovězeno 17/11/2011 v 17:42
zdroj uživatelem

hlasů
3

I doporučujeme používat binární proměnné x_i, t modelovat pozice vašich položek, to znamená, že jsou nulové, pokud je položka nachází na levém břehu po výletu t a jednou jinak. Nejvýše jedna z těchto proměnných může změnit během výletu. To lze modelovat

x_wolf, 1 + x_cabbage, 1 + x_goat, 1 <= 1 + x_wolf, 0 + x_cabbage, 0 + x_goat, 0 a

x_wolf, 1> = x_wolf, 0

x_cabbage, 1> = x_cabbage, 0

x_goat, 1> = x_goat, 0

Podobné omezení jsou nutná pro výlety v opačném směru.

Navíc po lichého počtu cest vám asociační omezení pro kontrolu položek na levém břehu, a Podobně je nutné zkontrolovat správné břeh. Například:

x_wolf, 1 + x_goat, 1> = 0 a

x_wolf, 2 + x_goat, 2 <= 1 ...

Použití horní hranice pro t, tak, že řešení je jistě možné.

A konečně, zavedení binární proměnnou z_t a nechat

z_t <= 1/3 (x_wolf, t + x_cabbage, t + x_goat, t)

a maximalizovat sum_t (z_t).

(S největší pravděpodobností sum_t (x_wolf, t + x_cabbage, t + x_goat, t) shold fungovat také.)

Odpovězeno 18/11/2011 v 08:38
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more