Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.
Nástěnka
❗22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
❗04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
❗23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.
Nejste přihlášen(a). Přihlásit
Stránky: 1
Mám tady něco na dlouhý zimní večery s čím bych potřeboval pomoct. Problém neni v postupu, ale v tom jak to pořešit v Excelu jelikož ručně se tohle asi dělat nedá...
Takže, kámoška z ekonomky mi poslala tenhle příklad:
Máme dány 4 lokality, kam je možné umístit střediska s kapacitou 10 000 jednotek, ze kte-rých je třeba obsluhovat 5 zákazníků s požadavky po řadě 2 000, 3 000, 4 000, 5 000 a 6 000 jednotek. Náklady na dopravu jedné jednotky z lokality i k zákazníkovi j jsou v tabulce. In-vestiční náklady na výstavbu středisek jsou v jednotlivých lokalitách po řadě 500, 600, 750 a 650 tis. Kč za plánovací období. Určete plán zásobování jednotlivých zákazníků při minimál-ních celkových nákladech, jestliže z lokalit 3 a 4 není možné zásobovat více než 2 a z ostat-ních lokalit více než 3 zákazníky.
Investiční náklady
110 95 100 120 115
80 75 70 60 65
130 105 90 100 85
110 80 70 80 85
Jednotku si představuju třeba jako nějakej balík. Takže např z druhýho stanoviště bude stát doručení jednoho balíku třetímu zákazníkovi 105 Kč. Problém je z jakých stanovišť budu posílat kolik balíků jakym zákazníkům. Když si označim zákazníka jako i a stanoviště jako j, tak mám celkem 20 proměnných, tu matici nahoře pak použiju jako matici koeficientů. Za těch 20 proměnných teď budu dosazovat takový čísla abych mi splňovaly všechny ty podmínky v zadání (např. že první zákazník chce poslat 2000 balíků, že z první lokality můžu obsluhovat max 3 zákazníky atd atd) a aby byla výsledná cena minimální.
Jak to udělat? Ručně by se to dělalo asi do konce života. V excelu je na to jakýsi doplněk, kterej se jmenuje Řešitel.
Neni ale ve standardní instalaci, takže nejdřív musíte Nástroje -> Doplnky a zaškrtnout řešitel (bude potřeba instalacni cd). Až se to tam kopne tak tohle udělátko bude dostupný z: Nástroje -> Rešitel
Tady je moje řešení v Excelu
V levý tabulce mám ty náklady, v tý tabulce koeficientů v pravo je právě to místo kde se Řešitel hraje a zkouší tam postupně různý hodnoty. Na obrázku je už vidět výsledek co mi to vyplivlo. Ještě v tý tabulce nad Cenou se počítá kolik bude stát doprava balíků z jednotlivých lokalit k jednotlivým zákazníkům. Ve výsledný ceně je tohle všechno sečtený + součet cen za založení stanoviště.
Výsledek je asi minimální hodnota.
Kde je problém?
Problém je v tom, že když si všimnete tak ze 4. lokality obsluhuju 4 zákazníky, ale podle zadání můžu z týhle lokality obsluhovat jenom dva. Řešitel mi vyplivnul tohle řešení protože sem nezapočítal to omezení na počet obsluhovaných zákazníků z jednotlivých lokalit a nezapočítal sem to protože když zkusim přidat třeba omezení jenom na jednu lokalitu tak mi to vyplivne buď totální nesmysl, nebo spíš vůbec nic a nahlásí to, že nenašel řešení, který by splňovalo ty podmínky...
Zajímá mě jestli s tímhle máte někdo zkušenost a jestli jo tak v čem je problém?
Musí tohle udělátko najít řešení když to řešení existuje? Jak to tak totiž vypadá tak ne...
K tomu výsledku co je na obrázku sem se dohrabal s tímhle nastavením:
Když ale změním jenom třeba tu extrapolaci z kvadratický na lineární, tak z toho vypadnou jiný hodnoty a výsledek samozřejmě neni minimální. Navíc podle nápovědy se ta extrapolace týká pouze počáteční inicializace těch hodnot...
Když změnim metodu tak zas špatnej výsledek.
Jako poslední kapka je, že když přidám to omezení na počet obsluhovaných zákazníků z jedný lokality tak si to ani neškytne, ani to nerozmístí nějaký počáteční hodnoty - to se dá zjistit když zaškrtnu Zobrazit výsledek iterace - prostě v každym kroku tam zůstávají nuly...
Ze zoufalství sem zkusil prográmek, kterej se dá najít na solver.com Je to asi to stejný i když tam píšou jaký to nemá vylepšení - nedoporučuju to ani stahovat, samozřejmě si to ani neštěklo...
Existuje i nějakej jinej prográmek, který vždycky najde správný řešení???
Dík za všechny odpovědi, tady ještě odkaz přímo na ten .xls kde jsem to zkoušel
Odkaz na .xls
Offline
↑ xxsawer:
Zdravím,
jen poznámky (nemám dnes časovou možnost si celý problém zapsat do modelu a zadat do Řešitele). Ovšem pokud bys napsal celý model v podobě soustavy rovnic a nerovnic + cílová funkce, kterou máš minimalizovat (tento zápis jsem nenašla, kde je?), snad by se to kontrolovalo lépe.
V tomto tématu mám odkaz na jednu semestrálku, kterou jsme počítali s kolegou a na další úlohu lineárního programování, všechno je jednodušší, než to, co máš, ale princip u semestrálky "Sklady" byl podobný (v určitém okamžiku se muselo derivovat pro nalezení minima).
Do nastavení Řešitele (nabídka Možnosti Řešitele) bych vůbec nezasahovala, myslím, že primárně všechno bere jako lineární model.
Offline
↑ jelena:
Ahoj ahoj,
cílová funkce tam neni protože sem myslel, že si to bude chtít udělat každý sám. Tady jsem to zkusil nějak přehledně zapsat...
Omezení týkající se počtu dodaných balíků a max počtu balíků v jednom stanovišti bych zapsal takhle:
Minimalizační funkci jsem zapsal takhle:
Omezení na počet obsluhovaných zákazníků v jedný lokalitě mě nenapadá jak zapsat do rovnice, ale bude to jasný z dalšího obrázku. V excelu na to používám funkci COUNTIF, která mi vrací počet buněk, ve kterých je nějaká hodnota > 0.
Tady je tabulka s vysvětlivkama
Když se podíváš přímo na ten Excel (odkaz je nakonci v tom mym prvnim příspěvku) tak ti to bude určitě za chvíli jasný. To nastavení Řešitele je uložený přímo v tom dokumentu takže stačí spustit Řešitele a přidat tam ty podmínky na kterých se to po...
Jako lineární model to právě defaultně nebere - musí se to zaškrtnout v těch možnostech (no po pravdě stejně mi neni jasný, co to ten lin. model je:) ), ale i když ho zaškrtnu tak mi to napíše, že "Podmínky nesplňují předpoklady pro lineární model".
Hlavně mi prostě neni jasný, jak je možný, že když změnim jenom tu extrapolaci z kvadratický na lineární (což je navíc defaultní hodnota) a mělo by to znamenat jenom počáteční odhad hodnot, tak se to prostě nedohrabe ke správnýmu výsledku...
Offline
Takže podařilo se mi zredukovat problém na úplně jednoduchou věc, ve který je asi zakopanej pes...
Udělal sem si takovouhle tabulku:
V tý větší tabulce řešitel generuje čísla, nejsou na ní kladeny žádný podmínky (ale výsledek byl stejnej i když sem na ní dal podmínky, že tam mají být celý kladný čísla).
Ta tabulka Countif počítá vždycky počet sloupců větších než 0 (v příslušnym řádku). Podmínky na všechny buňky týhle tabulky sem dal aby byly menší nebo rovný 3 a větší nebo rovný 1.
Výsledek má být minimální a je to suma tý tabulky Countif
Řešitel si ani neštěkne, proč???
Okamžitě to ohlásí, že nenašel vhodné řešení...
Použil sem normálně defaultní nastavení Řešitele, což je tohle:
Offline
↑ xxsawer:
Omlouvám se, ale dřív jsem se k Řešiteli nedostala - myslím si, že problém je spiš v tom, že v zadání cílové buňky není funkce SKALARNI SOUČIN (viz tento postup: http://www2.zf.jcu.cz/~jfrieb/emm/resitel.pdf ), ale jen suma. Zkoušela jsem jen narychlo nechat počítat s takovou funkci a vypočetl řešení. Zkus to přeměnit v tomto smyslu dle návodu.
Pokud mohu doporučovat, tak bych pro začátek neřešila povolený maximální počet zákazníků, ani zda středisko postavím nebo ne (brala bych, že postavím), ale jen minimalizaci v zásobování. Pokud to dokaže spočítat, tak bych uvažovala, jak omezit zbytek. Variantu, že nekteré ze středisek nepostavím, bych asi neuvažovala vůbec.
Offline
↑ jelena:
V poho, to vůbec nespěchá, já budu rád když se to vůbec vyřeší :)
Koukal jsem na to PDF v odkazu...Jde to vyřešit jak skalárnim součinem tak sumou. Zkusil sem naschvál předělat u sebe ty tabulky abych tam místo sumy hodil skalární součin a výsledek:
1. Minimalizace zásobování když mám jenom podmínky, že každej zákazník chce určitej počet balíků - OK
2. (1. + omezení, že z každýho stanoviště můžu poslat max 10000 balíků) - OK, ale jenom s určitym nastavenim Řešitele. Vysoká přesnost, Přesná derivace + kvadratickej start
3. (2. + připočítávám zakládání stanovišť - stejný jako 2.)
4. Když započítám omezení na počet zákazníků v lokalitě tak se to sesype. Vadí tomu to COUNTIF i další funkce. Otázka je jak se toho zbavit?
Neni možný, že je v tom řešiteli možný používat jenom matematický funkce?
Offline
↑ xxsawer:
Zdravím,
zkoušela jsem počítat se souborem tak, jak máš, a všechno řeši bez problému (včetně budování středisek) - i bez speciálního nastavení, dokud se nedoplní omezení na počet zasobovaných zákazníků. Zkoušela jsem:
- omezení přímo na buňku s COUNTIF, nebo
- hodnotu z buňky COUNTIF necham posílat do jiné buňky, kde je omezení.
Pokud nastavím omezení do 5 zákazníků včetně, tak vypočte až do konce. Ovšem pokud nejdřív necham vypočítat bez COUNTIF minimální řešení s výsledkem například 4 zákazníků pro lokalitu 1 a pak hodnotu "4" nastavím jako omezující na počet zákazníků pro stejnou lokalitu, tak už to nezvladne.
Nemaji kamarádky z ekonomky nějakou metodiku (přec jim to nedali bez přípravy)? Já to ještě zkusím v CALCu, bohužel až do dneška jsem neměla čas.
zkus se podívat zde: http://www-neos.mcs.anl.gov/ nebo se objeví nápad od kolegů, děkuji :-)
Offline
↑ jelena:
Ahoj, v pohodě, já sem rád, že se tim vůbec zabýváš :)
Určitě jsi zkoušela ten můj excel??? Odkaz na něj je tady:
Odkaz na .xls
Je to pořád ten stejnej z prvního příspěvku. To nastavení Řešitele je uložený přímo v tom dokumentu a je to přesně to jak je na screenshotu v tom prvnim příspěvku... Když to v možnostech změnim na defaultní hodnoty tak je výsledek špatnej - vyjde 3430010
Když tam nechám to co tam mám tak vyjde 2680000 - což už je správně...
Trochu sem si s tim pohrál a udělal tenhle .xls:
Odkaz
Tady ještě screen z toho:
V tý Changing table si normálně generuje Řešitel ty svoje hodnoty (používám defaultní nastavení). Ta tabulka Countif nedělá nic jinýho než že počítá v kolika sloupcích tý Changing table je hodnota větší než 0. Výsledek je suma týhle Countif tabulky. Podmínka pro výsledek je = 10. Schválně to zkus - ani si to neštěkne a hned konec.
Pak sem tam udělal tabulku If. Kde se do příslušný buňky hodí 1 když je v tý changing table v příslušný buňce hodnota > 0. Výsledek je suma celý týhle tabulky a podmínka pro něj je stejná. Zas ani ťuk.
No a nakonec sem tam hodil tabulku SUM kde je prostě jenom suma příslušnýho řádku tý Changing table. Výsledek je zas suma týhle tabulky a podminka stejná = 10. A jede to...
Tak mi prostě přišlo, že ten Řešitel neumí s těmahle funkcema pracovat, ne nějak pořádně... ALE v tom příkladu co tady řešíme tak když se mrkneš do toho sloupce Cena za založení stanoviště tak tam používám normálně fci KDYŽ a s jistym nastavenim to šlape...
Teď mě napadá jestli tohle nemůže být ten důvod, že to nešlape s defaultnim nastavenim...
Nahodil sem tenhle problém na Microsofti forum k Excelu a někdo mi tam odpověděl tohle:
In a nutshell, Solver can not work with CountIf and If functions in the
model. This is because these are discontinuous functions. Solver is
not capable of determining a "finite difference" to help with a
derivative. Solver will often give up without warning at the first sign
of confusion.
Your model would have to be reworked without these functions.
Neni mi úplně jasný co se myslí tím pojmem "discontinuous functions" Jestli to je prostě nespojitá funkce, tak OK, je fakt že COUNTIF a IF spojitý neni, ale fůrt mi vrtá hlavou proč to nespadne v tom příkladě co tady řešíme když tam ten IF taky používám...
Napadá mě ještě jedna otázka...K čemu je vlastně ten Řešitel??? A co bych musel udělat abych splňoval ten lineární model v možnostech toho Řešitele??? To bych to musel nějak převést na lineární rovnice?? To PDF jak si mi na něj tady dávala odkaz s tou třezalkou atd sou vlastně jenom lineární rovnice.
Navíc jestli máš OpenOffice, zkus ten příklad otevřít v tom. Je tam taky řešitel a na tom příkladu si to ani neťukne a hned napíše, že to neni lineární model. Takže otázka, co se myslí lineárním modelem? :)
Kámoška řikala, že jim nic k tomu neřekli...no moc se mi tomu věřit nechce ;) Termín pro odevzdání je už asi prošvihlej - pár dní sem s ní nemluvil tak nevim, řešim to hlavně protože tohle mě fakt zajímá...
EDIT: jo tim CALCem byl asi myšlenej OpenOffice :)
Offline
↑ xxsawer:
Samozřejmě, používám jen tvůj soubor z 1. příspěvku (až tak akční nejsem, že bych ho přepsala). Ano, CALC (OpenOffice) to nevzal vůbec.
Ale jinou zajimavost jsem zjistila - když nastavím pro buňky, kde je COUNTIF, omezení "větší nebo se rovná" 3 (také jsem zkoušela i 4), tak to Řešitel počítá a má vysledek. Z toho usuzuji, že samotné COUNTIF nevadí. IF nevadí určitě, to už jsme použili pro "budovat - nebudovat".
K čemu je Řešitel? - zejména úlohy lineárního programování (optimalizační úlohy), zkus postudovat, pokud je zájem. V úlohách se může stát, že není řešení - ale nijak se mi to nejeví v tomto případě.
Lineární je proto, že všechno, co sestavíme, jsou lineární závislosti. Řešitel jsem použivala pouze, pokud někdo potřeboval vyřešit nějakou podobnou úlohu (ale nikdy jsem neměla omezení na počty, jak máme zde). Jak vidiš z přiložených souboru, co jsem odkazovala, tak Řešitel pro malý počet promenných je plně nahraditelný kvalitní propiskou a dostatkem čtverečkovaného papáru :-)
No jelikož je po termínu, tak tedy můžeme klidně pokračovat :-)
Offline
Stránky: 1