Program pro fiktivní elektrárnu – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Program pro fiktivní elektrárnu – Java – Fórum – Programujte.comProgram pro fiktivní elektrárnu – Java – Fórum – Programujte.com

 

magelord0
Newbie
3. 10. 2012   #1
-
0
-

Zdarec,
mám za úkol vypracovat toto zadání

Zadání: Firma „Napětí a proud“ provozuje fiktivní zdroje elektrické energie (klasické a alternativní) a přenosovou soustavu, kterou dodává elektrický proud firmám a domácnostem. Celkem provozuje jeden klasický zdroj (elektrárnu) o výkonu 150 MW nacházející se přibližně uprostřed území o velikosti 250*250 km a 10 menších rovnoměrně rozmístěných alternativních zdrojů elektrické energie, každý o výkonu 10 MW. Minimální vzdálenost těchto zdrojů je 50 km. Výkon elektrárny se může měnit maximálně o 10% během jedné hodiny, výkon alternativních zdrojů se může měnit v intervalu 0 až 100% během jedné hodiny. Na daném území se dále rovnoměrně vyskytuje 1.100 odběrných míst, z toho je 100 firem o maximálním průměrném příkonu 1MW (příkon firem odpovídá diskrétnímu rovnoměrnému rozdělení na intervalu 500 kW až 1,5MW s krokem 10kW, tento příkon se mění v závislosti na denní době) a 1000 domácností o maximálním průměrném příkonu 100kW (příkon domácností odpovídá diskrétnímu rovnoměrnému rozdělení na intervalu 0 kW až 200kW s krokem 1kW, tento příkon se mění v závislosti na denní době). Elektrárna je přímo spojena se 150 nejbližšími odběrnými místy, každý alternativní zdroj energie je spojen s 50 nejbližšími odběrnými místy. Každé odběrné místo je dále spojeno s 30 dalšími nejbližšími odběrnými místy. Ztráta při přenosu elektrické energie je 0.25% na 1km vedení. Výrobní cena elektřiny je 1,80 Kč/kwh u klasického zdroje, 2 Kč/kwh u alternativních zdrojů energie.

celé zadání: https://docs.google.com/open?id=0B6O78S242hpXcERFQmR2TDl1V3c

Nejprve první problém, který mám... mohu to vypracovat v Javě nebo v Pascalu, v Pascalu již mám nějaké zkušenosti, ale zase mi to nepřijde jako moc dobrý jazyk do praxe, kdežto v Javě prakticky neumim, ale co jsem slyšel tak by to přes Javu mělo být jednodušší. Tak jako tak to asi bude muset být naprogramované objektivně, to neumím ani v Pascalu. Tak jestli by bylo lepší začít od píky s Javou, nebo se "jen" doučit OOP u Pascalu a dělat to v něm.

Druhý problém: Jak začít? Strašně moc požadavků, nevím jak to nějak dobře rozdělit abych se v tom vyznal. První co mě napadlo tak udělat pole 250*250 a pak nějak pomocí souřadnic označit jednotlivé dodejní místa, a pak nějak počítat vzdálenost mezi těmi jednotlivými místy a odebírat těch 0,25% po 1 km (1 políčko by se rovnalo 1 km)
Poté udělat nějaký program k té elektrárně, jak by ktesala a stoupala výkonost, co by se vázalo na všechny ty další elektrárny a domacnosti. Co vůbec nevím je jak tam zakomponovat ten čas s tim kolísáním dodané/spotřebované energie, nemluvě o tom, že mam najít ještě nějaké nejlepší rozložení aby výrobní náklady a náklady na přenos elektřiny k zákazníkům byly minimální.
 

Nahlásit jako SPAM
IP: 147.228.168.–
liborb
~ Redaktor
+18
Guru
3. 10. 2012   #2
-
0
-

Hezké cvičení na objekty. V Pascalu stojí objekty za prd, radši jdi cestou Javy ... ušetříš si mnoho nervů :).

A jak začít ... no máš tu objekt Uzemí, které obsahuje všechny objekty. To je elektrárna, záložní zdroje a odběrová místa (firmy a domácnosti). Všechny mají společnou minimálně jednu vlastnost, a to místo umístění na Území, takže máš kandidáta na rodičovskou třídu (třeba Budova).

Dále tu máme zdroje energie. K nim je připojeno 50 nejbližší spotřebitelů, takže další v řadě by mohla být třída Zdroj (dědí od Budova), která se bude obsahovat pole s 50 referencemi na instance objektů typu Spotrebitel.

No a pak už jenom třída Elektrarna a ZalozniZdroj, které dědí od Zdroj. Ty mají svoje specifické vlastnosti.

Na druhé straně je třída Spotrebitel. Ta si drží referenci na případně připojený zdroj elektrické energie a pak si drží pole 30 referencí na nejbližší další instance třídy Spotrebitel.

Třídy Firma a Domacnost pak dědí od Spotrebitele a dále specifikují svoje vlastnosti.

Leccos lze řešit děděním, něco rozhraním, ale to je šumák ... důležité je rozumět tomu, proč to děláš a mít návrh logicky správně. Takhle můžeš třeba začít a dál pokračovat. Až si zase nebudeš vědět rady, tak se ptej :)

Nahlásit jako SPAM
IP: 90.181.216.–
magelord0
Newbie
3. 10. 2012   #3
-
0
-

Jo a pak to má být ještě řešený v 3 vrstvém modelu... ale to asi pak půjde rozházet až se to naprogramuje ne? Nebo se s tim musí počítat už od začátku?

Nahlásit jako SPAM
IP: 147.228.168.–
magelord0
Newbie
3. 10. 2012   #4
-
0
-

Takhle?

Nahlásit jako SPAM
IP: 147.228.168.–
liborb
~ Redaktor
+18
Guru
3. 10. 2012   #5
-
0
-

OdbernaMista jsou to samé co Spotrebitel. Spotrebitel je taky v základu nějaká budova, takže ještě dědění. No a Uzemi si drží nejenom zdroje energie, ale i její spotřebitele.

Zasláno z mobilního telefonu.

Nahlásit jako SPAM
IP: 82.145.209.–
liborb
~ Redaktor
+18
Guru
3. 10. 2012   #7
-
0
-

Zdroj také dědí od Budova :).

Jinak tohle je základ. Základ datové vrstvy, takže máš hotovo tak 5%. Nyní jednotlivé vlastnosti ... Budova má souřadnice pozice na území, zdroje budou mít mimo jiné maximální a aktuální výkon, spotřebitelé maximální a aktuální spotřebu atd. Procházej to zadání a umisťuj jednotlivé atributy, přemýšlej kam by co mohlo patřit. Důležité je, aby to k sobě logicky pasovalo :)

Zasláno z mobilního telefonu.

Nahlásit jako SPAM
IP: 82.145.217.–
liborb
~ Redaktor
+18
Guru
3. 10. 2012   #8
-
0
-

Ještě jedna jednoduchá pomůcka při objektovém návrhu. Důležitá jsou slova JE a MÁ. JE je realizováno děděním a MÁ je realizováno atributem. Pár příkladů: Elektrárna JE zdroj. Domácnost JE spotřebitel. Zdroj JE budova atd. Takže to bude všechno realizováno děděním. Naproti tomu budova MÁ souřadnice umístění. Domácnost MÁ aktuální a maximální spotřebu. Elektrárna MÁ výkon. Území MÁ budovy atd. A to jsou zase atributy.

Zasláno z mobilního telefonu.

Nahlásit jako SPAM
IP: 82.145.209.–
magelord0
Newbie
23. 10. 2012   #9
-
0
-

Tak mam problém:

100 firem o maximálním průměrném příkonu 1MW (příkon firem odpovídá diskrétnímu rovnoměrnému rozdělení na intervalu 500 kW až 1,5MW s krokem 10kW, tento příkon se mění v závislosti na denní době)

Mam funkci random, která mi generuje hodnoty v rozmezí 500kW - 1500kW , ale nevím jak tam udělat to krokování, aby hodnoty končili nulou.

Nahlásit jako SPAM
IP: 212.79.110.–
liborb
~ Redaktor
+18
Guru
23. 10. 2012   #10
-
0
-

Buď zaokrouhlíš pomocí / 10 * 10 nebo si generuj čísla v rozmezí 10x menším a pak je vynásob 10.

Zasláno z mobilního telefonu.

Nahlásit jako SPAM
IP: 82.145.208.–
sleepy0
Stálý člen
23. 10. 2012   #11
-
0
-

Alebo to urob ze mas koncenu mnozinu prvkov z ktorej mozes vybrat {a1=0,5MW,a2,...,an=1,5MW} a nahodne vyberes cislo z nej. Takze mas 101prvkovu mnozinu a z nej chces vybrat cislo v intervale {0,1,2,...,100}, to urobis nasledovne: Math.floor(101*Math.random()) = p. K cislu p*10 pripocitas 500 a mas vysledok.

Alebo sa takto netrap a pouzi nieco taketo: http://www.cs.geneseo.edu/~baldwin/reference/random.html

Random generator = new Random();

int p = generator.nextInt(100);// to da cisla od 0-100

Nahlásit jako SPAM
IP: 158.195.195.–
TheOndrap+2
Super člen
23. 10. 2012   #12
-
0
-

Nestuduješ FAV/ ZCU ? Připomíná mi to hodně naše bejvalá zadání :)

Nahlásit jako SPAM
IP: 147.228.209.–
ZČU v Plzni je mnohem víc, než jenom právnická fakulta !!
Fakulta aplikovaných věd www.fav.zcu.cz
"Když nedokážete říci věci jednoduše, pak jim dostatečně nerozumíte"
magelord0
Newbie
24. 10. 2012   #13
-
0
-

#11 sleepy
jo tak nějak to mam 

int prikonf = generatorPrikonu.nextInt(1000) + 500 ;
    
     prikonf = (prikonf/10)*10;
    
     double prikonfi = (prikonf * (hodina[23]/100));
           
     System.out.println("Prikon firmy pro 23. hodinu: " +prikonfi +"kW");

Nahlásit jako SPAM
IP: 2a01:490:11:74d8:651a:22a...–
magelord0
Newbie
24. 10. 2012   #14
-
0
-

#12 TheOndrap
přímo FAVku ne, ale mam tam povinnejch asi 6 předmětů

Nahlásit jako SPAM
IP: 2a01:490:11:74d8:651a:22a...–
magelord0
Newbie
24. 10. 2012   #15
-
0
-

Tak to neni úplně štastný řešení, potřebuju do toho zakomponovat to diskrétní rovnoměrné rozdělení, ale nevim jak to mam udělat aby ten průměr těch všech domácností/firem nebyl větší než to maximum (1MW u firem)

tady http://math.feld.cvut.cz/prucha/m3p/7cu.pdf  jsem našel co to je to diskretní rozdělení, ale pořád nevim ja kto adaptovat na všechny ty domácnosti... to si musim všechny ty náhodně vygenerovaný příkony nejdřív někam uložit a pak je doupravit aby byli pod ten max. průměr?
 

Nahlásit jako SPAM
IP: 212.79.110.–
sleepy0
Stálý člen
25. 10. 2012   #16
-
0
-

Nic nekomponuj, sak ty mas rovnaku pravdepodobnost dostat lubovolnu hodnotu z intervalu <0.5,1.5> . Takze ak budes mat vela domacnosti tak zacnes dostavat hodnotu okolo toho 1MW. Uz to za teba vyriesila statistika.

Nahlásit jako SPAM
IP: 158.195.195.–
Dano
~ Anonymní uživatel
101 příspěvků
25. 10. 2012   #17
-
0
-

ja len tak na okraj ;)

tento riadok je zbytocny  

prikonf = (prikonf/10)*10;

 je to iste ako  

prikonf = prikonf;
Nahlásit jako SPAM
IP: 217.75.89.–
liborb
~ Redaktor
+18
Guru
25. 10. 2012   #18
-
0
-

#17 Dano
Jen tak mimochodem, ten řádek je tam naprosto správně. Kdyby sis přečetl celou diskuzi, tak bys věděl, že jeho snahou bylo dostat příkon s krokem po 10. Jednou z možností je to udělat právě takto. Kdyby měl být krok 5, tak se udělá analogicky / 5 * 5 atd.

Nahlásit jako SPAM
IP: 188.75.135.–
magelord0
Newbie
25. 10. 2012   #19
-
0
-

#16 sleepy
Ano okolo toho 1MW, ale v zadání je že ten 1MW musí být maximální možný průměr všech příkonů. A já si myslim, že když to takhle necham tak určitě někdy nastane situace že ten průměr bude třeba 1,1MW

Nahlásit jako SPAM
IP: 212.79.110.–
liborb
~ Redaktor
+18
Guru
25. 10. 2012   #20
-
0
-

Možností je hodně, tak si třeba průběžně při generování počítej ten průměr a pokud by to ke konci vycházelo přes 1MW, tak omez maximum a tím srazíš i ten průměr.

Nahlásit jako SPAM
IP: 188.75.135.–
sleepy0
Stálý člen
25. 10. 2012   #21
-
0
-

#19 magelord
To je mala pravdepodobnost, ale budiz ak nastane taka situacia tak mozes skusit tie firmy preskalovat. Jednoducho si vypocitas AP ~ 1+epsilon MW a potom kazdej firme pridelis prikon P*1/(1+delta) MW, kde delta>=epsilon a P je povodny odber firmy. Ale rob to iba ak by ti vislo cislo nad 1MW, lebo to c vide pod 1 ma rovnaku pravdepod. ak to co nad 1, ale netreba to skalovat lebo podmienka bola splnena.

Nahlásit jako SPAM
IP: 158.195.195.–
Dano
~ Anonymní uživatel
101 příspěvků
25. 10. 2012   #22
-
0
-

#18 liborb
Ano, moja vina, moja vina, moja prevelka vina   

Nahlásit jako SPAM
IP: 217.75.89.–
magelord0
Newbie
25. 10. 2012   #23
-
0
-

#20 liborb
já to maximum snížit nemůžu, to je daný, těch 100kw u domácností a 1MW u firem

#21 sleepy
moc nechápu, co je to to AP ?

Jednoducho si vypocitas AP ~ 1+epsilon MW a potom kazdej firme pridelis prikon P*1/(1+delta) MW, kde delta>=epsilon a P je povodny odber firmy.

AP ~ 1+epsilon                                // epsilon = počet firem? = 100 ?
if (delta >= epsilon(100))                   // delta = max příkon? (1mw?)
firma() = P*1/(1+delta)                      // P = náhodně vygenerovanej příkon z 0,5mw - 1,5 mw

Nahlásit jako SPAM
IP: 2a01:490:11:74d8:2538:174...–
sleepy0
Stálý člen
25. 10. 2012   #24
-
0
-

#23 magelord

AP - aritmeticky priemer a to je asi kolko ti vide (1+-epsilon)[MW] no a delta je viac alebo rovne epsilon.

lepsie oznacim:

P_{str}=1+epsilon (to je nieco male) = 1/N*sum_{j=1}^{N} P_{j} //Pj je odber j-tej firmy a N je pocet firiem

dleta je nieco male ale vacsie ako epsilon delta[MW] >= epsilon [MW]

no a prikon na firmu  bude

P' = P1/(1+delta) >= P*(1/P_{str}) // to znamena ze to nanormujes delta moze byt aj epsilon z podmienky

P je to ze kolko si od teba pytala firma (nahodne generovane cislo)

P' je to co jej das , tzn. nanormujes to.

Ale ako som povedal nieje to az tak treba lebo cisla vacsinou vychadzaju 1 pre tych 100 firiem.

Nahlásit jako SPAM
IP: 158.195.195.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 8 hostů

Podobná vlákna

Dávka pro program — založil Kiki Lopez

Program pro java — založil Luke

Program pro 8051 — založil Wexter

Program pro prvočísla — založil Daniel

Program v C pro PIC18F452 — založil hynman

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý