.[ ČeskéHry.cz ].
Chtel by nekdo spolupracovat na nekterem z techto temat?
Jdi na stránku Předchozí  1, 2, 3, 4, 5, 6  Další
 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> Inkubátor
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
asiJa



Založen: 10. 08. 2008
Příspěvky: 66
Bydliště: Praha/Hranice

PříspěvekZaslal: 11. duben 2013, 17:56:50    Předmět: Odpovědět s citátem

praveze, dost zalezi jako co, a jak v jake distribuci, verzi ... neco jde samo a neco skonci v "dependency hell" (napr. aktualni verzi OpenCL pro python je v ubuntu praktikcy nemozne nainstalovat, podobne PsysiX nebo Cuda sem mel velke problemy). Nekdy clovek precta 10 navodu, a pak zjisti ze v posledni verzi odstranili podporu (priklad POVray)
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
asiJa



Založen: 10. 08. 2008
Příspěvky: 66
Bydliště: Praha/Hranice

PříspěvekZaslal: 12. duben 2013, 10:39:26    Předmět: Odpovědět s citátem

Paranoik >
vys k cemu by bylo treba dost potreba umelou inteligenci?

Vyreseni ulohy nalezeni optimalni stihaci / unikaci trajektorie / strategie. Presneji jde o to ze mam dve kosmicke lode = jedna stiha druhou. A ty lode maji omezene mnozstvi paliva a omezeny tah motoru.
rekneme ze mame lode a kazda ma dva motory:
1) poskytujici zrychleni 0.0001 G a s neomezenym palivem
2) poskytujici zrychleni 1 G a s palivem omezenym na 1000 sekund.
(pzn. stihajici lod musi byt trochu rychlejsi jinak by se nikdy nedohnaly => rekneme ze ma motor 0.00015 G s nekonecnym palivem )
Ty lode jsou na zacatku od sebe v nejake vzdalenosti R0 a maji rychlost V0 (jsou to vekotry v 3D prostoru)
Otazka je vyresit optimalni zpusob jakym by mela jedna lod stihat druhou, resp. jak by mela druha unikat.
Pro jednoduchost neuvazujem zadne gravitacni pole ani dalsi sily - jen motory. Tedy optimalizovat je potreba to kdy jakou silou a kterym smerem ma tahnout motor lodi.


Podobna uloha je nalezt optimalni transfer mezi dvema orbitami. Resp. mezi dvema stavy R1,V1, R2,V2 tak aby se spotrebovalo co nejmene paliva nebo to trvalo nejmene casu, ale to v gavitacnim poli (tj. mimo motoru pusobi jeste centralni sila/zrychleni A_gravity ~1/R^2 smerem k planete)

Jako tyhle ulohy se klasicky resi jako variacni, ale na pocitaci v posledni dobe se na to prave hodne casto pouzivaji geneticke algoritmy a neuralni site. Nerikam ze by sme v nasi hre meli mit nejake super skvele reseni hodne pro NASA, staci nejake hodne priblizne. Ale pripada mi ze je to alespon trochu nutne optimalizovat pomoci nejakeho algoritmu, protoze pro hrace by bylo dost neintuitivni vedet jak optimalne ridit kosmickou lod (kdy kam tahnout motorem) aby to letelo skutecne tam kam chce.

Tady jsou nejake clanky kde se ta uloha resi:
http://www.genetic-programming.org/hc2005/Lee_GECCO.pdf
http://en.cnki.com.cn/Article_en/CJFDTOTAL-BJHK200802002.htm
http://en.wikipedia.org/wiki/Trajectory_optimization

sam sem se na to uz nekolikrat chtel vrhnout, ale prislo mi ze pokud delas AI / GA / NN ... tak je to presne pro tebe (ta
fyzika je tam jednoducha, proste iterujes v case
V += A * dt
R += V * dt
)
slozite je nalezte spravnout posloupnost A(t) (tj. v kterem casovem okamziku jake zrychleni) abys ses nakonec dostal do stavu pozadovaneho V(t_final), R(t_final)


Naposledy upravil asiJa dne 12. duben 2013, 13:54:02, celkově upraveno 1 krát
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
TeaTime



Založen: 17. 06. 2011
Příspěvky: 263

PříspěvekZaslal: 12. duben 2013, 12:24:17    Předmět: Odpovědět s citátem

V tomhle typu simulace bude hráč rozhodně potřebovat solidního autopilota. To je fakt, že u toho bude nějaká ta AI potřeba.

Ta úloha na stíhání a unikání je podle mě blbost. Pokud je to v prostoru bez jakýchkoliv překážek, tak co vlastně pak znamená, že loď unikla? Že se vzdálila nad nějakou danou vzdálenost? Ale to přece nemůže - pokud se bude stíhací loď chovat naprosto přesně stejně jako stíhaná loď, tak prostě budou mít pořád konstantní vzdálenost od sebe. A o to horší to bude, když bude mít stíhací loď silnější motory, nebo když bude stíhaná loď zatáčet.

Jinak to s těmi orbitami by mohlo mít nějakou pointu. Nevím teda, jestli je to na týhle úrovni generalizace modelu vůbec úloha na biologické algoritmy, ale rozhodně je tam co analyzovat.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
asiJa



Založen: 10. 08. 2008
Příspěvky: 66
Bydliště: Praha/Hranice

PříspěvekZaslal: 12. duben 2013, 13:40:07    Předmět: Odpovědět s citátem

citace:
Ta úloha na stíhání a unikání je podle mě blbost. Pokud je to v prostoru bez jakýchkoliv překážek, tak co vlastně pak znamená, že loď unikla? Že se vzdálila nad nějakou danou vzdálenost? Ale to přece nemůže - pokud se bude stíhací loď chovat naprosto přesně stejně jako stíhaná loď, tak prostě budou mít pořád konstantní vzdálenost od sebe. A o to horší to bude, když bude mít stíhací loď silnější motory, nebo když bude stíhaná loď zatáčet.

No pri tomhle zjednoduseni co jsem uvedl jde spise o to za jak dlouho se ty lodi dostihnout pripadne jak dlouho budou sobe na blizku (aby stihajici lod mela dost casu svymi zbranemi znicit lod stihanou). Samozdrejme to zalezi na vstupnich parametrech jak si uvedl - pokud bude mit stihajici lod slabsi nebo stejne silny motor jako stihana, tak ji nikdy nedostihne, pokud silnejsi tak ji dostihne v nejakem konecnem case (zalezi za jak dlouho).
Ten druhy motor (o vysokem tahu a malem mnozstvi paliva) je od toho ze unikajici lod pokud jej pouzije ve spravny okamzik ve spravnem smeru, tak se staci vyhnout stihajici lodi, a ta na to nestihne zareagovat, tazke se lodi minou (proleti kolem sebe ve velke vzdalenosti a zbrane moc nevyuziji). Alternativni strategie muze byt zrychlovat naproti stihajicimu, aby ten nestacil vyuzit svych zbrani (aby mel k strebe jen kratkou dobu) - i kdyz tady si nejsem jisty jestli by to fungovalo (tj. je treba zvazit vykon zbrani za cas). Jako ta otazka urcite ma smysl, jenze je mozna moc komplexni (musi se do ni zahrnout vsemozne ruzne nastaveni motoru, a pripadne i zbrani - cemuz sem se chtel vyhnout)


No, ale kdyz o tom tak uvazuju, mozna by se reseni tehle slozite optimalizacni ulohy dalo vyhnout a proste to nechat na citu/zkusenosti hrace. (?) Coz ale potrebuje mu k tomu udelat prijemene prehledne GUI aby se v tom 3D prosotru vyznal (vedel kam natahnout krivku vektoru tahu). Samozdrejme hrac by to neresil zdaleka optimalne, ale o to by to mohla byt vetsi sranda. Na druhou stranu by to pak trochu postradalo na realisticnosti, protoze vypocty optimalni drahy v kazdem pripade kosmicle lodi vyuzivaji a vyuzivat budou. Vzdyt to dnes dela kdejaka raketa zeme-vzduch aby maximalizovala sve sance ze trefi nepratelskou stihacku.

citace:
A o to horší to bude, když bude mít stíhací loď silnější motory, nebo když bude stíhaná loď zatáčet.

Zatacet v kosmu je to same jako zrychlovat - dela se to motorem. Zatimco letadlo se pri zataceni opira o vzduch, motorka o cestu, kosmicka lod se neopira o nic - krome setrvacnosti propelantu ktery vypousti z trysky. Takze o "zataceni" nema smysl nejak explicitne premyslet - je to proste zrychleni diky natoceni trysky nejakym smerem, a spotrebuje stejne paliva jako odpovidajici zrychleni vpred ci vzad. Jinak redseno - pokud se chce lod otocit o 180 stupnu ve volnem vesmiru bez gravitace ma uplne jedno jestli opis ladnou kruznici s konstantni rychlosti (jak by to udelalo letadlo), nebo jestli nejdrive tryskou zabrzdi na nulu a pak se urychli v opacnem smeru na puvodni rychlost. No teda vlastne ta druha moznost je vyhodnejsi (spotrebuje myslim sqrt(2) x mene paliva). Tohle je jedna z veci co delajinerealisticky dogfight stihacek z hvezdnych valek litajici po ladnych krivkach jako letadla.


Naposledy upravil asiJa dne 12. duben 2013, 14:14:39, celkově upraveno 1 krát
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Hunter



Založen: 28. 07. 2007
Příspěvky: 544

PříspěvekZaslal: 12. duben 2013, 14:10:37    Předmět: Odpovědět s citátem

asiJa napsal:
uplne jedno jestli opis ladnou kruznici s konstantni rychlosti (jak by to udelalo letadlo), nebo jestli nejdrive tryskou zabrzdi na nulu a pak se urychli v opacnem smeru na puvodni rychlost. No teda vlastne ta druha moznost je vyhodnejsi (spotrebuje myslim sqrt(2) x mene paliva). Tohle je jedna z veci co delaji nerealisticky dogfight stihacek z hvezdnych valek litajici po ladnych krivkach jako letadla.
Úplně jedno to není, dokud máš uvnitř lidskou osádku. Tu je totiž potřeba nezabít zrychlením a nedezorientovat v prostoru.
Navíc v dogfightu není moc rozhodující, kolik manévr spotřebuje paliva, ale hlavně kolik času zabere (čím míň, tím líp, i kdyby byl energeticky náročnější - protože je pořád lepší být živej, než mrtvej, ale s plnou nádrží).
_________________
Sharing is caring.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
TeaTime



Založen: 17. 06. 2011
Příspěvky: 263

PříspěvekZaslal: 12. duben 2013, 14:17:42    Předmět: Odpovědět s citátem

No ty Star Wars dogfighty mě taky připadají nesmyslné. Tak samozřejmě by ty lodě mohly mít nějaký prazvláštní druh pohonu, jehož podstata dnes není vůbec známá a u nějž se vyplatí dělat nějaké ladné oblouky, ale většinou se to bohužel implementuje čistě jako prvoplánová kopie dynamiky letadla.

Nicméně pokud budeme chápat pojem 'zatáčení', jako změnu směru nebo velikosti zrychlení, pak platí to, co jsem napsal - že to prostě pomáhá stíhajícímu.

Kdyby ten model boje byl složitější (všechny ty věci, co jsi uvedl v prvním odstavci), apk by samozřejmě úloha mohla mít smysl. Nicméně jak už jsem uváděl dříve - je nejdříve potřeba navrhnout nějak ten model boje a pak ho znalyzovat, nalézt v něm jádro té hratelnosti a zbytek osekat a pak až tešit AI a implementaci.

Ale už mi přijde, že tu vykládám věci, co ti jsou celkem jasné a ani nejsou tak důležité...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
asiJa



Založen: 10. 08. 2008
Příspěvky: 66
Bydliště: Praha/Hranice

PříspěvekZaslal: 12. duben 2013, 14:25:23    Předmět: Odpovědět s citátem

Hunter > jj, otocka po kruznici vs. linearni zabrzdeni a urychleni vzad ma prave presne stejne maximalni zrychleni (tj. omezeni pro posadku). Ale to druhe spotrebuje mene casu a paliva. (a spletl jsem se neni to sqrt(2)-krat ale myslim spis Pi-krat (snad se nemylim nechce se mi o tom ted do detailu premyslet) )
Jinak lidska posadka pro mne klicova neni (proc by tam musela byt?) ale ona ta kosmicka lod taky kdovijake zrychleni nevydrzi a hlavne ty iontove motory utahnou > 0.000prd G jen s opravdu hodne velkou namahou.

a jinak - pokud pouzivas chemicke motory tak na spotrebe paliva teda SAKRA HODNE ZALEZI (Kdyz ches zmenit rychlost o 8 km/s a mas vytokovou rychlost spalin 4km/s tak spotrebujes palivo hmotnosti 2x vetsi nez kolik vazi cela lod. )

ad model boje
Aby jsme se meli o cem bavit, ja tu dam co jsem napsal v soucasnem znacne nedokoncenem stadiu
https://docs.google.com/file/d/0B4W6nulE1YeTVTB6LUd1aDdNMDg/edit
berte to ale prosim s rezervou je tam hodne chyb, neco chyby, a neco je kompilat starsich txtu ktere jsem jeste nestacil revidovat (a treba bych snimi ani dnes nesouhlasil)
Chtel jsem tam dat i ilustrace a grafy vykonu, ale k tomu jesm se jeste nedostal
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
TeaTime



Založen: 17. 06. 2011
Příspěvky: 263

PříspěvekZaslal: 12. duben 2013, 17:00:03    Předmět: Odpovědět s citátem

A skutečně se dá lasery způsobit nějaké poškození na velkou vzdálenost? Vlastně o laserech mám málo znalostí, ale měl jsem za to, že v oblasti boje to s lasery nebude nic moc. Případně že se dá takovýto útok snadno odvrátit (např zrcadlem?).
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
asiJa



Založen: 10. 08. 2008
Příspěvky: 66
Bydliště: Praha/Hranice

PříspěvekZaslal: 12. duben 2013, 20:32:26    Předmět: Odpovědět s citátem

co se tyce vzdalenosti - omezene je to pouze difrakci svetla (na velkou vzdalenost nedokazes tak presne zaostrit ohnizko)
zalezi na vlnove delce a velikosi apertury. Svetlo se rozptulyje umerne Rayglihovu kriteiru http://en.wikipedia.org/wiki/Rayleigh_criterion#Explanation

priblizne se da rici ze to musi splnovat tuhle rovnici

vlnova_delka [mikrometry] * vzdalenost [1000 km] = velikost_ohnizka [metry] * apertura metry [metry]

tj. treba kdyz chces strilet na 1000 km do ohnizka 10 cm, musis mit bud laser s aperturou 10 m v prumeru a vlnovou delkou 1 micron, nebo s aperturou 1m a vlnovou delkou 100 nm. (samozdrejme za predpokladu ze tu aperturu (zrcadlo, cocku) dokazes dost presne vyrobit a zamerit)

co se tyce ochrany - jj, ochrana proti laserum je casto codela snadna (myslel jsem ze tam o tom pisu, rozhodne to mam v umyslu rozpesat). Jak rikas zrcadlem. V infracervene oblasti maji hodne doboru odrazivost (treba 99,9 %) i kovove folie jako zlato. Jinak pro presne zanmou frekvenci je mozne udelat multiplayer dielektricke vrstvy (takove ta duhova vrstvicka na brilich) ktere maji pro presne vybranou frekvenci odrazivost treba 99.9999%.

Problem nastava kdyz intenzita laseru dosahne limitu prurazu (laser je elektromagneticke pole - dielektrikum izolat - obcas to pole je tak silne ze to proste propali jako blesk/jiskra). Pak se zrcadlo pozkodi.

To muze byt ale nekdy vyhoda - vznikne plazma ktera svetlo sama odrazi a zaroven dobre izoluje. Zalezi pak ale z ceho ta plazma je a jakou ma teplotu - jeji plazmova frekvence musi byt vyzsi nez frekvence laseru aby laser odstinila.

Tohle co sem rekl se tykalo klasickych laseru ( IR, viditelna oblast, UV) ktere silne interaguji s beznou latkou s valencnimi elektrony, takze pusobi na povrchu materialu.

Neco jineho jsou pak rentgenove X-ray a Gamma lasery - ty pronikaji hluboko do materialu poskozuji ho zevnitr. Proti nim zrcalo nebo tenak folie neuchrani.

Ono je spise problem vyrobit dost intenzivni laser (dnes co se pouziva ma ucnost trba 1% takze na GW energie zasahujici cil musis nekde vzit 100 GW prikonu proudu a uchladit 99 GW odpadniho tepla).

Napr nejvetsi laser na zemi je dnes NIF (National ignitation facility na zapalovani inercialni vodikove fuze https://lasers.llnl.gov/#_ )
je to obrovsky barak ale jeho pulz energie je 1,6 MJ (~ rucni granat )...tedy nic moc

Ale existuji i zbusoby jak udelat vykony laser s mnohem vyzsi ucninosti a kompaktnejsi (ty se tam snazim popsat ). V soucasne dobe nejrozvinutejsi, i kdyz stale v plenkach je Free electron laser - je to laser pracujici na elektronech urychlenych na rychlost blizkou rychlosti svetla pomoci nekolik kilometru dlouheho urychlovace. Dobre na nem je mimo jine taky to ze je X-ray (hluboka pronikavost) a preladitelny v sirokem rozsahu frekenci (=> protivnik nemuze zvolit vhodny material stitu protoze nevi jakou frekvenci na nej budes strilet)
http://www.rikenresearch.riken.jp/eng/hom/4622.html
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
TeaTime



Založen: 17. 06. 2011
Příspěvky: 263

PříspěvekZaslal: 13. duben 2013, 14:15:41    Předmět: Odpovědět s citátem

Ohledně toho tvého dokumentu 'Boj ve sluneční soustavě' - bylo by dobré, kdyby čtenář věděl, co jsou ověřené a těžko zpochybnitelné údaje a co je spíš fikce. Když to čtu, tak kolikrát nevím, co z toho je jakási představa o tom jak by to mohlo vypadat a co je ověřený fakt.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
asiJa



Založen: 10. 08. 2008
Příspěvky: 66
Bydliště: Praha/Hranice

PříspěvekZaslal: 14. duben 2013, 16:21:29    Předmět: Odpovědět s citátem

jj, to mas asi pravdu. Ale od zakladu se mi to prepisovat nechce - asi tam akorat pridam reference u vecich ktere jsou overeny fakt (nekde je tam mam), a to ostatni je pak moje spekulace.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
asiJa



Založen: 10. 08. 2008
Příspěvky: 66
Bydliště: Praha/Hranice

PříspěvekZaslal: 18. duben 2013, 09:28:24    Předmět: Odpovědět s citátem

Takze jsem skousel jak by sme mohli nejlepe simulovat ty orbity.
Keplerova draha kolem jednoho telesa jakozto elipsa se da spocitat analiticky presne. Mi tam ale chceme zapocitat zrychleni.

Puvodne sem myslel ze bude stacit verlet, ten zachovava energi (je to symplectic integrator ) problem je ze ten se staci v periheliu. Skousel jsem tedy Runge kutta RK4 ale zjistil jsem ze ani nezachovava energii (vy vysledku je horsi nez verlet - to me prekvapilo)

Mnohem lepsi je ale RK4 s adaptivnim krokem ( vzal jsem ho odtud
http://www.physics.buffalo.edu/phy410-505/2011/topic2/app1/index.html ). Adaptivni krok je dobry pro simulaci jedne lodi (muzu si iterovat svym vlastnim casovym krokem), nejsem si ale jisty jestli nebude problem sychronizace casovych kroku pri reseni pohybu vice lodi zvlaste v multiplayeru. Jde o to ze pokud je lod blizko planety pusobi na ni mnohem vetsi gravitace a tedy i zrychleni a casovy krok se musi zmensit.


vysledky testu viz zde
https://plus.google.com/photos/100958146796876347936/albums/5662577789393012465/5867742338501142754

je to 10 period objehu ty dlouhe cisla jsou 48968 je pocet itaraci (evaluaci gravitace) potrebnych k 10 periaodam obehu s touto presnosti. jak je videt RK4 s konstantnim krokem pada, verlet se trosku staci, a RK4adaptive je stabilni, presna a spotrebuje 6x mene kroku.

delal jsem to v pythonu (pro jednoduchost)

kód:

from pylab import *
import math

G_m1_plus_m2 = 4 * math.pi**2

ForceEvals = 0

def getForce(x,y):
   global ForceEvals
   ForceEvals += 1
   r = math.sqrt( x**2 + y**2 )
   A = - G_m1_plus_m2 / r**3
   return x*A,y*A

def equations(trv):
   x  = trv[0]; y  = trv[1]; vx = trv[2]; vy = trv[3];
   ax,ay = getForce(x,y)
   flow = array([ vx, vy, ax, ay ])
   return flow

def SimpleStep( x, dt, flow ):
   x += dt*flow(x)

def verletStep1( x, dt, flow ):
   ax,ay = getForce(x[0],x[1])
   vx   = x[2] + dt*ax; vy   = x[3] + dt*ay;
   x[0]+= vx*dt;        x[1]+= vy*dt;
   x[2] = vx;        x[3] = vy;

def RK4_step(x, dt, flow):    # replaces x(t) by x(t + dt)
   k1 = dt * flow(x);     
   x_temp = x + k1 / 2;   k2 = dt * flow(x_temp)
   x_temp = x + k2 / 2;   k3 = dt * flow(x_temp)
   x_temp = x + k3    ;   k4 = dt * flow(x_temp)
   x += (k1 + 2*k2 + 2*k3 + k4) / 6

def RK4_adaptive_step(x, dt, flow, accuracy=1e-6):  # from Numerical Recipes
   SAFETY = 0.9; PGROW = -0.2; PSHRINK = -0.25;  ERRCON = 1.89E-4; TINY = 1.0E-30
   scale = flow(x)
   scale = abs(x) + abs(scale * dt) + TINY
   while True:
      x_half = x.copy();  RK4_step(x_half, dt/2, flow); RK4_step(x_half, dt/2, flow)
      x_full = x.copy();  RK4_step(x_full, dt  , flow)
      Delta = (x_half - x_full)
      error = max( abs(Delta[:] / scale[:]) ) / accuracy
      if error <= 1:
         break;
      dt_temp = SAFETY * dt * error**PSHRINK
      if dt >= 0:
         dt = max(dt_temp, 0.1 * dt)
      else:
         dt = min(dt_temp, 0.1 * dt)
      if abs(dt) == 0.0:
         raise OverflowError("step size underflow")
   if error > ERRCON:
      dt *= SAFETY * error**PGROW
   else:
      dt *= 5
   x[:] = x_half[:] + Delta[:] / 15
   return dt   

def integrate( trv0, dt, F, t_max, method='RK4', accuracy=1e-6 ):
   global ForceEvals
   ForceEvals = 0
   trv = trv0.copy()
   step = 0
   t = 0
   print "integrating with method: ",method," ... "
   while True:
      if method=='RK4adaptive':
         dt = RK4_adaptive_step(trv, dt, equations, accuracy)
      elif method=='RK4':
         RK4_step(trv, dt, equations)
      elif method=='Euler':
         SimpleStep(trv, dt, equations)
      elif method=='Verlet':
         verletStep1(trv, dt, equations)
      step += 1
      t+=dt
      F[:,step] = trv[:]
      if t > t_max:
         break
   print " step = ", step


# ============ MAIN PROGRAM BODY =========================

r_aphelion   = 1
eccentricity = 0.95
a = r_aphelion / (1 + eccentricity)
T = a**1.5
vy0 = math.sqrt(G_m1_plus_m2 * (2 / r_aphelion - 1 / a))
print " Semimajor axis a = ", a, " AU"
print " Period T = ", T, " yr"
print " v_y(0) = ", vy0, " AU/yr"
dt       = 0.0003
accuracy = 0.0001

#                 x        y     vx  vy
trv0 = array([ r_aphelion, 0,    0, vy0 ])             

def testMethod( trv0, dt, fT, n, method, style ):
   print " "
   F = zeros((4,n));
   integrate(trv0, dt, F, T*fT, method, accuracy);
   print "Periods ",fT," ForceEvals ",  ForceEvals
   plot(F[0],F[1], style ,label=method+" "+str(fT)+"T "+str(  ForceEvals ) );
   
testMethod( trv0, dt, 10, 20000  , 'RK4', '-' )
testMethod( trv0, dt, 10, 10000  , 'RK4adaptive', 'o-' )
testMethod( trv0, dt/4, 10, 100000, 'Verlet', '-' )
#testMethod( trv0, dt/160, 2, 1000000, 'Euler', '-' )

legend();
axis("equal")
savefig("kepler.png")
show();


jeste uvazuju ze bych mohl vzit itegrator zde
1) zde http://burtleburtle.net/bob/java/orbit/index.html
stahl jsem si ho ale zatim se mi ho nepodarilo zkompilovat - vite nekdo jak zkompilovat plain .java files kde v nich chybi "main" methoda?
Zatim se snazim vybrat z toho dulezite casti a predelat je do vlastniho kodu v processingu.
2) zde
http://www.unige.ch/~hairer/software.html
http://www.av8n.com/computer/geometric-numerical-integration/
ale ten je zase prasacky napsany ve fortranu77, resp. automaticky konvertovany z fortranu77 do plain .c
3 zde
https://code.google.com/p/exoflight/source/browse/trunk/Exoflight/src/com/fasterlight/exo/orbit/integ/RungeKuttaFehlberg45.java?r=269
ale nechce se mi resit zavislosti na zbytku toho velkeho projektu
[/code]
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
nou



Založen: 28. 07. 2007
Příspěvky: 1036

PříspěvekZaslal: 18. duben 2013, 14:32:56    Předmět: Odpovědět s citátem

ja by som skombinval obydva pristupy. teda ked je lod v klude a nema zapnute motory tak leti po keplerovskej elipse. ak zapnes motor tak sa prepne na integracnu metodu. takto isto to riesi aj ten kerbal. ked bezi hra v realnom case tak mozete vidiet ze sa vam meni periapsis. akonahle zrychlite cas na 2x a viac tak sa to zafixuje.
_________________
Najjednoduchšie chyby sa najtažšie hľadajú.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
asiJa



Založen: 10. 08. 2008
Příspěvky: 66
Bydliště: Praha/Hranice

PříspěvekZaslal: 22. duben 2013, 11:44:04    Předmět: Odpovědět s citátem

Tak sem pouzil Runge-Kutta-Fehlberg ( RKF45 ) s adaptivnim casovym krokem, jako metoda vyzsiho radu funguje optimalne kdyz po ni chci vyzsi presnost. Nejlepsi vykon (nejmene vypoctu na simulaci 1 orbity) podava pri presnosti 1e-9 ( tj. draha Jupiteru s presnosti 1km ).

Protoze ve hre budu potrebovat aby cas plynul stejne pro vsechny telesa a kazde teleso je resene s jinym casovym krokem, udelal jsem to tak ze Body.move(global_time) zkontroluje jestli je lokalni cas telesa pred globalnim casem, a kdyz je potreba predpocita krok dopredu. Poloha a rychlost jsou pak interpolovane kubickou krivkou pro kazdy globalni cas z dvou kroku.

Udelal jsem to v processingu (=Java) - tady by mel byt fungujici aplet a code
http://www.openprocessing.org/sketch/96977

trosku jsem resil tu optimalizaci drah. Zjistil jsem ze pro telesa v homogenim gravitacnim poli existuje analyticke reseni - zrychleni tvaru
a(t) = A + B*Cos( Pi t/(t1-t0))
je optimalni (energeticky nejmene narocny) zpusob jak prjit z jednoho stavu polohy a rychlosti (t0, x0, v0) do jineho (t1, x0, v0) v case t1-t0

V nehomogenim gravitacnim poli (tj. v centralnim poli, kdyz je urazena draha nezanedbatelna s orbitalnim polomerem) to tak jednoduse resit nejde. Vymyslel sem nejake zpusoby jak by se to dalo resit genetickym algoritmeme ( popisu pozdeji ) ale neprijdou mi moc dobre. Melo by to jit vyresit nejak lepe - kdybych rozumel lepe reseni diferencialnich rovnic.


Jinak co planuju udelat jako GUI do hry - pro dane teleso predpocitat nekolik casovych kroku drahy
1) bez tahu motoru (analyticky elipsa)
2) s maximalnim konstantnim tahem v pred a vzda (tj. rovnobezne k rychlosti)
3) s maximalnim konstantnim tahem na vsechny strany kolmo k rychlosti
4) s maximalnim konstantnim tahem na kouli okolo telesa tj T_max = sqrt( Tx^2 + Ty^2 + Tz^2)

Tim dostanu mapu ukazujici maximalni rozsah manevru kosmicke lodi v nasledujicim case. Potom ji nejak hezky animovane budu vykreslovat (a prepocitavat ji po nejakem poctu kroku animace). Hrac tak bude mit predstavu ceho je jeho lod v dane chvili schopna.
To same vykreslim i pro nepratelskou kosmickou lod ( pouze s tim rozdilem ze u nepratelske lodi nezname presne jeji tah motoru => muzeme jej pouze hadat - nastavit jako parametr). Hrac pak bude vedet co lze a nelze udelat, kam lze a nelze letet, a kam by mel namirit trysky motoru aby dosahl potrebneho cile.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
asiJa



Založen: 10. 08. 2008
Příspěvky: 66
Bydliště: Praha/Hranice

PříspěvekZaslal: 13. květen 2013, 11:24:42    Předmět: Optimalizce orbitalniho transfer Odpovědět s citátem

Nejakou dobu jsem sem nepsa, coz ale neznamena ze sem k vesmirnym soubojum nic nenaprogramoval - naopak

Tak jsem docela uspokojive vyresil problem ktery jsem povazoval za hodne obtizny - optimalizace prechodu z jedne orbity na druhou, respl. optimalizace stihani jedne kosmicke lodi jinou na orbite kolem slunce/zeme

vysledky vypadaji asi takto:
Cervena krivka je initial guess, cerna krivka je po optimalizaci.

[img]https://plus.google.com/photos/100958146796876347936/albums/5662577789393012465/5877399381376289202?banner=pwa[/img]
https://plus.google.com/photos/100958146796876347936/albums/5662577789393012465/5877399381376289202?banner=pwa

[img]https://plus.google.com/photos/100958146796876347936/albums/5662577789393012465/5877399467439279474?banner=pwa[/img]
https://plus.google.com/photos/100958146796876347936/albums/5662577789393012465/5877399467439279474?banner=pwa

Samozdrejme, NASA ma na to asi lepsi software, ale pro potreby hry tohle myslim staci.

pouzivam drahu vyjadrenou v polarnich souradnicich, pomoci nejakych bazovych funkci (spline, nebo rada cosinu). tu muzu analiticky 2x zderivovat abych dostal kinematicke zrychleni pak odecist gravitacni zrychleni abych dostal tah motoru v danem okamziku a pak spocitat integral z druhe mocniny tahu ktery by mel odpovidat spotrebe paliva u vykonemlimitovych motoru s menitelnym specifickym impulzem.

Tvar drahy je kontolovan 8-32 parametry. V tomhle 8-32 parmetrovem stavovem prostoru pak normalne minimaluzuji fittnes function definovanou spotrebou paliva.

Skousel jsem ruzne algoritmi minimalizace - random walk, simplex method. Nejlip fungovalo BFGS ze scipy.optimize a to i prezto ze zatim nemam implementovane analyticke gradienty fittnesfunction podle parametru (i kdyz to v pricipu neni zas tak tezke spocitat), takze BFGS musi ty gradienty pocitat numericky konecnyma diferencema(tzn. ze potrebuje asi 4x tolik vyhodnoceni drahy nez kdyby ty gradienty melo). Trochu problem je ze BFGS zatim nemam implementovane v jave. Ale asi to pujde opsat tady
https://code.google.com/p/vladium/source/browse/trunk/optlib/src/com/vladium/util/optimize/BFGS.java?r=3

Z praktickeho hlediska
V pythonu s pouzitm numpy s dokazu nalezt optimalni drahu s rozumnou presnosti za 0.3-1.5 sekund. Nemyslim si ze se to prepsanim do java nebo C++ nejak vyrazne zrychli protoze jde v principu o vektorove operace ktere jsou v numpy dobre optimalizovane.

Je to sice prekvapive rychle ale pro potreby real-time hry to asi uplne nestaci. Kdyby se melo cekat az 2sekundy nez se spocita draha zatimoco by system zamrzl, byklo by to dost neprijemne.

V prubehu optimalizace je potreba vyhodnotit typicky 1000-5000 drah. Kvuli tomu ze vyhodnoceni jedne drahy trva kratkou dobu ( rekneme 8000 Flops) ale je potreba hodne takovych operaci, tak to nejde akcelerovat pomci OpenCL jak jsem mel puvodne s umyslu, protoze minimalizace se seqecialni (nejde moc paraelizovat)

mozna by mohlo pomoct kdybych mel nejaky lepsi initial guess, nebo kdybych zmensi kriteria konvergence. Nebo bych mohl nejdrive predoptimalizovat nahrubo s mensim poctem parametru, a teprve potom zjemnovat.

Teoreticky mi to prijde hrozne zajimavy problem, a mam radost ze se mi ho podarilo docela slusne vyresit. Pozdeji se to da pouzit nejen pro kosmicke lodi, ale treba pro umelou inteligenci dog-fightu normalnich letadel v atmosfere.
Spatne ale je, ze straslive zabredavam do takovyhle technickych detailu coz hodne odvadi od vytvoreni hry jako celku v nejakem konecnem case
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> Inkubátor Časy uváděny v GMT + 1 hodina
Jdi na stránku Předchozí  1, 2, 3, 4, 5, 6  Další
Strana 5 z 6

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna