UPD1 ïŒ æè¿ã® 2〠ã®èšäºãèªãã åŸãç§ãå®éš/ç 究/åéºã«åå ããããšã«ããŸããïŒå¥œããªãã®ãåŒãã§ãã ããïŒã èšäºã®æåŸã«ãå¥ã®äžè«èª¿æ»ãè¿œå ããŸãã-ã ããªãã¯ãã«ãŒãã«ã«ãã£ãŠãã®ãããªçãå°éçãªèšäºãHabrahabrã«å¥šå±ããŸããïŒ ã
ã¯ããã«
ãã§ã«ãããã«ã«ãã³ãã£ã«ã¿ãŒïŒFCïŒã«ã€ããŠããããå¿ èŠãªãã®ãšããã®æ§ææ¹æ³ïŒæŠå¿µäžïŒã«ã€ããŠæžãããŠããŸãã 以äžã¯å©çšå¯èœãªèšäºã®äžéšã§ãã
⢠ã«ã«ãã³ãã£ã«ã¿ãŒ
⢠ã«ã«ãã³ãã£ã«ã¿ãŒ-ïŒé£ããïŒ
⢠ã«ã«ãã³ãã£ã«ã¿ãŒ-ã¯ããã«
⢠æ¡åŒµçŸå®ã®ãããå€ïŒéçºè ã®ããã«æºåããããšïŒããŒã2/3ïŒ
⢠å°åUAVçšã®éçŽäº€SINS
⢠å€å žååŠïŒãæã§ã®ãæ¡æ£ã«ã€ããŠ
ãŸããå€ãã®å€æ°ã®éç·åœ¢é¢æ°ãæé©åããããã®ããŸããŸãªç¢ºççã¢ã«ãŽãªãºã ã®é©çšã«é¢ããHabrtã«é¢ããèšäºãå€æ°ãããŸãã ããã«ã¯ãé²åã¢ã«ãŽãªãºã ãã·ãã¥ã¬ãŒãããã¢ããŒãªã³ã°ãããã¥ã¬ãŒã·ã§ã³ã¢ã«ãŽãªãºã ãå«ãŸããŠããŸãã 以äžã®èšäºãžã®ãªã³ã¯ã
⢠ã¢ããŒãªã³ã°ã®ã·ãã¥ã¬ãŒã·ã§ã³æ¹æ³
⢠éºäŒçã¢ã«ãŽãªãºã ãšã¯äœã§ããïŒ
⢠éºäŒçã¢ã«ãŽãªãºã ã çè«ããå®è·µãž
⢠éºäŒçã¢ã«ãŽãªãºã ãç»åèªè
⢠éºäŒçã¢ã«ãŽãªãºã ã ã»ãŒè€é
⢠ãœãªã¥ãŒã·ã§ã³ãèŠã€ããŠçæããããã®éºäŒçã¢ã«ãŽãªãºã
⢠Robocodeãããã®äŸã«é¢ããéºäŒçã¢ã«ãŽãªãºã
⢠MATLABã®éºäŒçã¢ã«ãŽãªãºã
⢠é矀ã®è¡åã«åºã¥ã人å£ã¢ã«ãŽãªãºã
⢠éºäŒçã¢ã«ãŽãªãºã ã®å®çšåã®æŠå¿µ
⢠ãã¥ãŒã©ã«ãããã¯ãŒã¯ã®é²åæ¹æ³ã®æŠèŠ
⢠TAUããŒãŠã£ããºã
⢠èªç¶ãªã¢ã«ãŽãªãºã ã èã®çŸ€ãè¡åã¢ã«ãŽãªãºã
⢠èªç¶ãªã¢ã«ãŽãªãºã ã Bee Swarmã¢ã«ãŽãªãºã ã®å®è£
éå»ã®èšäºïŒ TAU-DarwinismïŒRuby implementation ïŒã§ãéºäŒçã¢ã«ãŽãªãºã ïŒGAïŒã䜿çšããŠåçã·ã¹ãã ã®æ°åŠçã¢ãã«ã®ãã©ã¡ãŒã¿ãŒãéžæããçµæã«æ³šç®ããŸããã ãã®èšäºã§ã¯ãããè€éãªåé¡-ã«ã«ãã³ãã£ã«ã¿ãŒã¢ãã«ã®åæã§GAã䜿çšããçµæã瀺ããŸãã ãã®ã¿ã¹ã¯ã®äžç°ãšããŠãFCã®é·ç§»ãããªãã¯ã¹ïŒå¥åé·ç§»ãããªãã¯ã¹ïŒã®ãã€ããã¯ã¹ãã©ã¡ãŒã¿ãŒã«éºäŒçã¢ã«ãŽãªãºã ããèšå®ãããŸãã GAã䜿çšããŠFCã®å ±åæ£è¡åã®å€ãéžæããããšãã§ããŸãããç§ã¯ãŸã ãããè¡ããªãããšã«ããŸããã äºåã«æž¬å®èª€å·®ã®å ±åæ£ã®ãããªãã¯ã¹ãç¥ã£ãŠãããããç§ã¯èªåã§ãã€ãºãçæããŸããã ããã»ã¹ãã€ãºã®å ±åæ£è¡åã¯å®éã«ã¯æ£ç¢ºã«ã¯ããããªããããé·ç§»è¡åã®å€ã®å€åã«å¯ŸããPCã®æ倧æ床ã«åºã¥ããŠå€ãéžæããŸããã
ãã ããããã§èª¬æããåé¡ãå ±åæ£è¡åã®å€ãæé©åããå Žåã«æ¡å€§ããããšã¯é£ãããããŸããã å ±åæ£è¡åãåã ã®éºäŒåã®å€ã«ãã£ãŠçæãããé·ç§»è¡åã®å€ãäºåã«èšå®ãããå¥ã®ç®çé¢æ°ãå®è£ ããå¿ èŠããããŸãã ãããã£ãŠãFCã®åæããã»ã¹å šäœã2ã€ã®æ®µéã«åããããšãã§ããŸãã
1. FCã®æ°åŠã¢ãã«ã®ãã©ã¡ãŒã¿ãŒã®æé©å
2.å ±åæ£è¡åå€ã®æé©å
äžã§æžããããã«ã第äºæ®µéã¯ãŸã å®è£ ãããŠããŸããã ãã ãããã®å®è£ ã¯èšç»äžã§ãã
åé¡ã®å£°æ
ã ããææŠã ããã€ãã®ã»ã³ãµãŒïŒæž¬å®ãã£ãã«ïŒã§æ§æãããç¹å®ã®æž¬å®ã·ã¹ãã ããããšããŸãã äŸãšããŠãå¥ã®èšäºã§èª¬æãããŠããéçŽäº€SINSïŒ å°ããªUAVã®éçŽäº€SINS ïŒãåãäžããŸãã ãã®ãããªã·ã¹ãã ã®åã»ã³ãµãŒã¯åå¥ã®åçã·ã¹ãã ã§ãããç¹å®ã®ç¬éããšã«1ã€ã®ã¹ã«ã©ãŒæž¬å®å€ãçæããŸãã åèš8ã€ã®æž¬å®ãã£ãã«ãããïŒãããã¯å ã®å é床èšã®æ床軞ã®æ°ã«å¿ããŠïŒã3ã€ã®ãã©ã¡ãŒã¿ãŒãæ±ããããŸãïŒæž¬å®ãããã¯ã®ç·åœ¢å é床æåïŒã
ã»ã³ãµãŒã«ã€ããŠäœãç¥ã£ãŠããŸããïŒ ã»ã³ãµãŒããã®ä¿¡å·ãéçã¢ãŒãã§èšé²ããã ãã§ãã ã€ãŸã ç§ãã¡ã«ãšã£ãŠã誰ããå°äžã®ã©ããã«å é床èšã®ãããã¯ã眮ããããšãã°ãããæ¥ãå é床èšã®æ床軞ã«éåå é床ã®æ圱å€ãæžãçããŸããã ãŸãããããã¯å ã®ã»ã³ãµãŒã®ã¬ã€ãäœåŒŠã®ãããªãã¯ã¹ã®ããããã®å€ãäžããŠã¿ãŸãããã
ç§ãã¡ã«äœãå¿ èŠã§ããïŒ ãã«ã«ãã³ãã£ã«ã¿ãŒã¿ã€ããïŒFCTïŒã®ã¢ã«ãŽãªãºã ãã³ã³ãã€ã«ããŸããããã«ããã枬å®ãŠãããã®ç·åœ¢å é床ã®æé©ãªæšå®å€ãåŸãããŸãã æé©ãšã¯ãæšå®èª€å·®ã®æå°åæ£ãšãã®æåŸ å€ã®æå°å€ïŒããŒãã誀差ã®æå°ãã€ã¢ã¹ïŒãæå³ããŸãã
泚ïŒå€å žçãªFCã¯ããã®ã¢ãã«ãå®éã®ãªããžã§ã¯ãã®ã¢ãã«ãšäžèŽããããšãæå³ããããããã«ã«ãã³ã¿ã€ããã£ã«ã¿ãŒããšããååã䜿çšãããŸãã
éºäŒçã¢ã«ãŽãªãºã ã䜿çšããŠãã»ã³ãµãŒã¢ãã«ã®ãã©ã¡ãŒã¿ãŒãéžæããããšãææ¡ãããŠããŸãã éºäŒåã®å€ã¯ãã»ã³ãµãŒã®åŸ®åæ¹çšåŒã®ä¿æ°ãšããŠäœ¿çšãããŸãïŒèšäºTAU-Darwinismã® ãèå¥ãªããžã§ã¯ãããåç §ïŒã

ãããã®ä¿æ°ã«åºã¥ããŠã空éç¶æ ã®ã»ã³ãµãŒã®é¢æ£ã¢ãã«ãæ§ç¯ãããŸãïŒ ã«ã«ãã³ãã£ã«ã¿ãŒã® ãæ°åŠã¢ãã«ããåç §ããŠãã ãã-ïŒè€éã§ããïŒ ïŒã

ãããã®ã¢ãã«ã«åºã¥ããŠãããã©ã€ããŒããã«ã«ãã³åãã£ã«ã¿ãŒãã³ã³ãã€ã«ãããŸãã ããã€ãã®ãã®ãããªããã©ã€ããŒãããã£ã«ã¿ãŒã®ã¢ã»ã³ããªã¯ãé£éŠFCTã圢æããŸãã
å人ã®ãã£ãããã¹é¢æ°ã¯ãæšå®èª€å·®ã®äºä¹ã®å¹³åå€ã§å²ã£ãåäœãçæããŸãã

ããã§ãnã¯ãã£ã«ã¿ãŒã¢ããªã³ã°ããã»ã¹ã®ã¹ãããæ°ïŒèšé²ãããä¿¡å·ã®ãµã³ãã«æ°ïŒã§ãã
çµ±åãã£ã«ã¿ãŒãšäžè¬å
äžè¬åãããFCïŒOFKïŒïŒ ã«ã«ãã³ãã£ã«ã¿ãŒ-é£ããã§ããïŒ ïŒãã³ã³ãã€ã«ããæŠå¿µã«ã€ããŠã¯æ¢ã«èª¬æããŸããã ç§ã¯è©³ãã説æããŸããã äžçªäžã®è¡ã¯ãã»ã³ãµãŒã®åŸ®åæ¹çšåŒã䜿çšããŠç¶æ 空éã§ã¢ãã«ãæ§æããããšã§ãã 次ã«ãã»ã³ãµãŒã¢ãã«ã®å¯Ÿè§è¡åãæ¥ç¶ããŠãOFCã®ãããã¯å¯Ÿè§è¡åãæ§æããå¿ èŠããããŸãã ã€ãŸã ãã®ãããªè¡å

次ã®ãããªãã®ãæäŸããå¿ èŠããããŸãïŒé·ç§»è¡åã®å ŽåïŒ

ä¿æ°ã®2çªç®ã®ã€ã³ããã¯ã¹ã¯ãã»ã³ãµãŒïŒæž¬å®ãã£ãã«ïŒã®çªå·ã瀺ããŸãã
次ã«éèŠãªç¹ã¯ãFCã®ç¶æ ãã¯ãã«ã§ãã 倧ãŸãã«èšãã°ãå é床èšã®æ¯åã®å€äœïŒåé¡ã®ã¹ããŒãã¡ã³ãã§èæ ®äžïŒãšå€äœã®é床ãå«ãŸããŠããŸãã ãã ããå é床èšãFCã䜿çšããŠèšç®ãããç¶æ ã«ããããã«ããããã¯ã«é©çšããå¿ èŠãããå é床ãèšç®ããå¿ èŠããããŸãã ãããè¡ãã«ã¯ãæåã«ã«ã«ãã³ãã£ã«ã¿ãŒã§ã¢ãã«åãããå é床èšã®ä¿¡å·ãèšç®ããå¿ èŠããããŸã

ã©ãã§
![]() | -ã»ã³ãµãŒã¢ãã«æž¬å®è¡åã§æ§æããããããã¯å¯Ÿè§è¡å |
![]() | -ãããã¯å ã®ãã¹ãŠã®ã»ã³ãµãŒã®ç¶æ ãã¯ãã« |
ã»ã³ãµãŒä¿¡å·ã®ãã¯ãã«ãåä¿¡ããåŸã3ã€ã®æªç¥æ°ãæã€8ã€ã®æ¹çšåŒã®éå°æ±ºå®ã·ã¹ãã ãäœããã®æ¹æ³ã§è§£æ±ºããããšãæ®ã£ãŠããŸã

ã©ãã§
![]() | -å é床èšã®æ床軞ã®äœåŒŠãã¬ã€ããã |
![]() | -枬å®ãŠãããã®ææã®å é床 |
ãããŠãçªç¶...

æå°äºä¹æ³ã®ã¬ãŠã¹ã»ãã«ã³ãæ³ã䜿çšããŠã®ã¿æ¬äŒŒéè¡åãèšç®ã§ããŸãã

ããã§ãNã¯ã¬ã€ãäœåŒŠã®è¡åã§ãïŒäžèšã®ä¿æ°n11ãn12ã...ãn83ãåç §ïŒã
C-枬å®èª€å·®ã®å ±åæ£è¡åïŒCoffãšæ··åããªãã§ãã ããïŒã
OFKã¢ã«ãŽãªãºã ã®äœãæªãã®ã§ããïŒ ãã®é·ç§»ãããªãã¯ã¹ã«ã¯ãããã»ããµæéãç¡é§ã«ããããªãå€ãã®ãŒãããããŸãã Federal Kalman Filter Typeã¢ã«ãŽãªãºã ã解決ããã®ã¯ãŸãã«ãã®åé¡ã§ãã ãã€ã³ãã¯ç°¡åã§ãã ãã¹ãŠã®ã»ã³ãµãŒãäžåºŠã«çµã¿åãããŠãã»ã³ãµãŒããšã«8ã€ã®åå¥ã®ãã£ã«ã¿ãŒãå®è£ ããåäžã®ãã£ã«ã¿ãŒãã³ã³ãã€ã«ããããšãæåŠããŸãã ã€ãŸã 1ã€ã®16次ãã£ã«ã¿ãŒã®ä»£ããã«ã8ã€ã®2次ãã£ã«ã¿ãŒã䜿çšããŸãã æŠç¥çã«ã¯ãããã¯æ¬¡ã®ããã«è¡šãããšãã§ããŸãã

ããã8ã€ã®ããã©ã€ããŒãããã£ã«ã¿ãŒã®åºåã¯ãOFCã®å Žåãšåæ§ã«ãã¬ãŠã¹ãã«ã³ãæå°äºä¹ã®æ¹çšåŒã«ä»£å ¥ããã枬å®ãŠãããã®å é床ã®3ã€ã®æåã®æšå®å€ãåŸãããŸãã
Federated Kalmanãã£ã«ã¿ãŒã®æ¬ ç¹ã¯äœã§ããïŒ ãããã§ã¯ãåäžã»ã³ãµãŒã®æž¬å®èª€å·®ã®åæ£ãå«ãè¡å[1x1]ã¯ã枬å®èª€å·®ã®å ±åæ£ã®è¡åãšããŠäœ¿çšãããŸãã ã€ãŸã å ±åæ£è¡åã®ä»£ããã«ãç¹å®ã®ã»ã³ãµãŒã®ãã€ãºåæ£ã«çããã¹ã«ã©ãŒã䜿çšãããŸãã ãããã£ãŠã枬å®ãã£ãã«éã®ãã€ãºå ±åæ£ã¯èæ ®ãããŸããã ããã¯ãçžäºã«çžé¢ããå®éã®ãã€ãºã®å Žåããã®ãããªãã£ã«ã¿ãŒã¯ããŸãå¹æçã§ãªãããšãæå³ããŸãã ããã¯çè«äžã§ãã å®éã«ã¯ããã€ãºã®å ±åæ£ã¯æéãšãšãã«å€åãããããOFCãé£éŠæ¿åºã®ããããæé©ãªæšå®å€ãæäŸããããšãä¿èšŒããæ¹æ³ã¯ãããŸããã OFCã®å¹çã¯ãé£éŠæ¿åºã®ãã£ã«ã¿ãŒã®æå¹æ§ã«æ¯ã¹ãŠãããã«é«ãããåçã§ããããšãå€æããå¯èœæ§ããããŸãã ã¡ãªã¿ã«ãããã«ã€ããŠã¯ãŸã 調ã¹ãŠããŸããã
åæããã³ã·ãã¥ã¬ãŒã·ã§ã³ããã°ã©ã
ãœãªã¥ãŒã·ã§ã³æ§é
ã¢ã³ã°ãªã·ãºã ã«ã€ããŠäºåã«è¬çœªããŸãããå倧ã§å匷ããåçã®å°éçšèªããããã€ãã®çšèªãèŠã€ããããšãã§ããŸããã§ããã ããã§ããœãªã¥ãŒã·ã§ã³ã®æ§é ãæ¡å€§ãã説æããããã°ã©ã ã®è©±ãå§ããŸãïŒç³ãèš³ãããŸããïŒã 次ã«ãç§ã®æèŠã§æãèå³æ·±ãæ¹æ³ã®ããžãã¯ã説æããŸãã æåŸã«ãããã°ã©ã ã®ãœãŒã¹ããŒã¿ãçæããæ¹æ³ã«ã€ããŠèª¬æããŸãã
ãœãªã¥ãŒã·ã§ã³ã®æ§é ã¯ã以äžã®ãã€ã³ããããïŒ

ããã°ã©ã ã§ã¯2ã€ã®ãµãŒãããŒãã£ã©ã€ãã©ãªã䜿çšãããŸãããMath.Netã¯è¡å代æ°ãšä¹±æ°çæã«äœ¿çšãããFileHelpersã¯CSVãã¡ã€ã«ããããŒã¿ãããŒãããŸãã ããã«ãå®è£ ãããéºäŒçã¢ã«ãŽãªãºã ãšã³ãžã³ã¯ãã A Simple CïŒGenetic Algorithm ãïŒBarry LapthornïŒã®ãµãŒãããŒãã£å®è£ ã«åºã¥ããŠããŸãã 確ãã«ãå ã®å®è£ ã«ã¯ã»ãšãã©æ®ã£ãŠããŸããã
ãœãªã¥ãŒã·ã§ã³ã«ã¯ã1ã€ã®ã³ã³ãœãŒã«ã¢ããªã±ãŒã·ã§ã³ãããžã§ã¯ããšãã¡ã€ã³ããžãã¯ãå«ãã¯ã©ã¹ã©ã€ãã©ãªã¿ã€ãã®4ã€ã®ãããžã§ã¯ããå«ãŸããŠããŸãã
GAã¢ã»ã³ããªã«ã¯ããã®ååã瀺ãããã«ãéºäŒçã¢ã«ãŽãªãºã ã®å®è£ ãå«ãŸããŠããŸãã ããã«ã¯ãæšæ¬æ§é ïŒåã ã®ããŒã¿æ§é ïŒãšGAããã³SpecimenHelperã¯ã©ã¹ãå«ãŸããŸãã SpecimenHelperã¯éçã¯ã©ã¹ã§ãããåã ã®éºäŒåïŒGenerateGenesãCrossoverãMutateãPrintãªã©ïŒã®æäœãç°¡çŽ åããéçã¡ãœãããå«ãŸããŠããŸãã ãã®ã¯ã©ã¹ã«ã¯ãMath.Netã©ã€ãã©ãªã®ContinuousUniformä¹±æ°ãžã§ãã¬ãŒã¿ãŒã®ã€ã³ã¹ã¿ã³ã¹ãå«ãŸããŠããŸãã ãã®ãžã§ãã¬ãŒã¿ãŒã䜿çšããå¿ èŠããã£ãã®ã¯ã .Net 4.5ã¢ã»ã³ããªã®æšæºã®ã©ã³ãã ãžã§ãã¬ãŒã¿ãŒã¯ãåçã«åæ£ãããä¹±æ°ã§ã¯ãªããæ£èŠåæ£ãããä¹±æ°ãçæããããšãããããŸããã éºäŒåçæã®ããã«ãããã¯éåžžã«éèŠã§ãã
GAã¯ã©ã¹ã¯ã€ã³ã¹ã¿ã³ã¹æåã§ãã ç°ãªããã©ã¡ãŒã¿ãŒãšæ©èœã䜿çšããŠããªããã£ãã€ã¶ãŒã®è€æ°ã®ã€ã³ã¹ã¿ã³ã¹ãäœæããããšãã§ããŸãã ããšãã°ã1ã€ã®ãšã³ãžã³ã§ã»ã³ãµãŒã®æ°åŠçã¢ãã«ã®ãã©ã¡ãŒã¿ãŒãéžæãã2ã€ç®ã®ãšã³ãžã³ã§å ±åæ£è¡åã®å€ãéžæããã¯ããŒãžã£ãŒãéããŠãçŸåšæé©ãªæ°åŠçã¢ãã«ã®ãã©ã¡ãŒã¿ãŒã®ã¢ã»ã³ããªããã£ãããã¹é¢æ°ã«ãã¹ãªãããããããšãã§ããŸãã
ã·ãã¥ã¬ãŒã·ã§ã³ã¢ã»ã³ããªã«ã¯çŸåšã1ã€ã®éçFedKfSimã¯ã©ã¹ã®ã¿ãå«ãŸããŠããŸãã ããã«ã¯ãé£éŠãã£ã«ã¿ãŒã·ãã¥ã¬ãŒã·ã§ã³ã®ãã©ã¡ãŒã¿ãŒãSpecimenã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ã®ToFedKfæ¡åŒµã¡ãœãããå«ãŸãããã®åäœã®éºäŒåã«ãã£ãŠé£éŠãã£ã«ã¿ãŒãäœæãããŸãã ãã®ã¯ã©ã¹ã«ã¯éçãªSimulateã¡ãœãããå«ãŸããŠããŸãããã®ã¡ãœããã§ã¯ãæž¡ãããå人ã®ãã©ã¡ãŒã¿ãŒã«å¯ŸããŠãã§ãã¬ãŒã·ã§ã³ãã£ã«ã¿ãŒãäœæããããã®ãã£ã«ã¿ãŒã®åäœãã·ãã¥ã¬ãŒãããããã»ã¹ãéå§ãããŸãã
ãã£ã«ã¿ãŒã¢ã»ã³ããªã«ã¯ãç¶æ 空éïŒSSFã¯ã©ã¹ïŒã®åçã¢ãã«ãã«ã«ãã³åãã©ã€ããŒããã£ã«ã¿ãŒïŒKFã¯ã©ã¹ïŒãããã³ãã§ãã¬ãŒã·ã§ã³ãã£ã«ã¿ãŒïŒFedKFã¯ã©ã¹ïŒã®å®è£ ãå«ãŸããŠããŸãã SSFã¯ã©ã¹ã«ã¯ãã€ã³ã¹ã¿ã³ã¹ã¡ãœããã«å ããŠãé£ç¶äŒéé¢æ°ïŒFSïŒã®ä¿æ°ããç¶æ 空éã®é¢æ£ã¢ãã«ãçæã§ãã2ã€ã®éçã¡ãœãããå«ãŸããŠããŸãã PFãã©ã¡ãŒã¿ãŒã¯MatLabè¡šèšã§æž¡ãããŸãã

Filteringã¢ã»ã³ããªã®KFBuilderéçã¯ã©ã¹ã«ã¯ãé£ç¶FSã®ååãšåæ¯ã®ä¿æ°ã®æååã¬ã³ãŒãããœãŒã¹ããŒã¿ãšããŠäœ¿çšããç¶æ 空éã¢ãã«ãšãã©ã€ããŒãFCTãçæããããã®è£å©ã¡ãœãããšãå¿ èŠãªãµã³ããªã³ã°åšæ³¢æ°ïŒæééååæéã®éæ°ïŒãå«ãŸããŸãã
DALã¢ã»ã³ããªã«ã¯FileParserã¯ã©ã¹ãå«ãŸããŠããŸãããã®ã¯ã©ã¹ã¯ããããªãã¯ã¹ããŒã¿ãå«ãããã¹ããã¡ã€ã«ã®è§£æãããã³CSVãã¡ã€ã«ããã®ä¿¡å·ãšãã€ãºã®èªã¿èŸŒã¿ã«äœ¿çšãããŸãã
éºäŒçã¢ã«ãŽãªãºã ãšã³ãžã³
ãã®æäœã«ã¯ããã£ãããã¹é¢æ°ïŒFitnessFunctionïŒãæ¯éå£ãµã€ãºïŒPopulationSizeïŒãäžä»£æ°ïŒGenerationsCountïŒãåäœã®éºäŒåæ°ïŒGenomeSizeïŒã亀差確çïŒCrossoverRateïŒãçªç¶å€ç°ç¢ºçïŒMutationRateïŒãèšå®ããå¿ èŠããããŸãã
éå§æ¹æ³ã¯ãå人ã®åæéå£ãçæããããã«èšèšãããŠããŸãã ã¡ãœããã³ãŒãã以äžã«ç€ºããŸãïŒæãéèŠãªãã®ã®ã¿ãæ®ã£ãŠããŸãïŒã
ãã©ã€ããŒããã€ãã®éå§ïŒïŒ
private void Initiation() { //... _currGeneration = new List<Specimen>(); var newSpecies = Enumerable.Range(0, PopulationSize).AsParallel().Select(i => { var newSpec = new Specimen { Length = this.GenomeSize }; SpecimenHelper.GenerateGenes(ref newSpec); var fitness = FitnessFunction(newSpec); newSpec.Fitness = double.IsNaN(fitness) ? 0 : (double.IsInfinity(fitness) ? 1e5 : fitness); //... return newSpec; }).OrderBy(s => s.Fitness); _currGeneration = newSpecies.ToList(); // Huge load starts here :) _fitnessTable = new List<double>(); foreach (var spec in _currGeneration) { if (!_fitnessTable.Any()) { _fitnessTable.Add(spec.Fitness); } else { _fitnessTable.Add(_fitnessTable.Last() + spec.Fitness); } } TotalFitness = _currGeneration.Sum(spec => spec.Fitness); //... }
ããã§éèŠãªç¹ã¯ã䞊åLINQã®äœ¿çšã§ãã æåã«ã0ããæ¯éå£ã®ãµã€ãºãŸã§ã®ã€ã³ããã¯ã¹ã®é åãäœæãããŸãã ãã®åæãããã€ã³ã¹ã¿ã³ã¹ã«å¯ŸããŠã䞊åã¯ãšãªïŒ.AsParallelïŒïŒïŒãäœæãããŸãããã®ã¯ãšãªã«ã¯ãéžæã¯ãšãªãæ¢ã«ã¢ã¿ãããããŠãããæ¬æã§åã ã®ã€ã³ã¹ã¿ã³ã¹ãçæããããã®ãã£ãããã¹å€ãèšç®ãããŸãã æåŸã«ãé åºä»ãã¯ãšãªïŒ.OrderByïŒ...ïŒïŒãæ·»ä»ãããŸãã ãããã¯ãã¹ãŠãªã¯ãšã¹ãã§ããããã®ã³ãŒããããã¯ã¯ããã«å®è¡ãããŸãã å€ã¯æ¬¡ã®è¡ã§æŽæ°ãããŸãã
_currGeneration = newSpecies.ToList(); // Huge load starts here :)
ã³ã¡ã³ãã®å 容ã ãã®å Žåãèšç®ã¯ã¹ã¬ããããŒã«ã䜿çšããŠäžŠè¡ããŠå®è¡ããããããéžæèŠæ±ã®æ¬æã§ã¯ãå€ãæžã蟌ãå€æ°ãå ±æå€æ°ïŒå ±æé åãªã©ïŒã«é 眮ããããšã¯ã§ããŸããã ãã®ãããªã³ãŒãã¯ã䞊åãªã¯ãšã¹ãã®æäœãå€§å¹ ã«é ãããŸãïŒããã¯åŒãç¶ãçºçããŸãïŒã
çæãããå人ã«åºã¥ããŠãå人ã®ãã£ãããã¹ããŒãã«ãèšç®ãããŸããããã¯ã亀差ããå人ãéžæããã«ãŒã¬ãããã€ãŒã«ã¢ã«ãŽãªãºã ã«å¿ èŠã§ãã ã³ãŒããããããããã«ãè¡šã®åçŸåšïŒæåŸïŒã®å€ã¯ãåã®å€ãšçŸåšã®é©å床ã®åèšã§ãã ãã®ããã«ããŠãããŒãã«ã¯ç°ãªãé·ãã®ã»ã°ã¡ã³ãã§åããããŸã-é©å床ã倧ããã»ã©ãã»ã°ã¡ã³ãã®é·ãã倧ãããªããŸãïŒäžå³ãåç §ïŒã

ããã«ããã0ãããã¹ãŠã®é©å¿ã®åèšãŸã§ã®ç¯å²ã«åçã«ååžããã©ã³ãã å€æ°ã䜿çšããŠãæãé©å¿ããå人ãããé »ç¹ã«éžæãããããã«ã亀差ããå人ããæ£çŽã«éžæãããŸããããæè ãã亀差ããæ©äŒããããŸããã ä¹±æ°ãžã§ãã¬ãŒã¿ãŒãæ£èŠååžå€ãçæããå ŽåïŒ.Net 4.5ã®Randomã®å ŽåïŒãã»ãšãã©ã®å Žåããã£ãããã¹ããŒãã«ã®äžå€®ããå人ãéžæãããŸãã ãã®ãããMath.Netããã±ãŒãžã®ContinuousUniformã䜿çšããããšã¯ç§ã®å ŽåãéèŠãªç¬éã§ãããšäžèšã§è¿°ã¹ãŸããã
次ã«èª¬æããæ¹æ³ã¯ãéžææ¹æ³ã§ãã
ãã©ã€ããŒããã€ãéžæïŒïŒ
private void Selection() { var tempGenerationContainer = new ConcurrentBag<Specimen>(); //... for (int i = 0; i < this.PopulationSize / 2.5; i++) { int pidx1 = this.PopulationSize - i - 1; int pidx2 = pidx1; while (pidx1 == pidx2 || _currGeneration[pidx1].IsSimilar(_currGeneration[pidx2])) { pidx2 = RouletteSelection(); } //... var children = Rnd.NextDouble() < this.CrossoverRate ? parent1.Crossover(parent2) : new List<Specimen> { _currGeneration[pidx1], _currGeneration[pidx2] }; foreach (var ch in children.AsParallel()) { if (double.IsNaN(ch.Fitness)) { var fitness = FitnessFunction(ch); var newChild = new Specimen { Genes = ch.Genes, Length = ch.Length, Fitness = double.IsNaN(fitness) ? 0 : (double.IsInfinity(fitness) ? 1e5 : fitness) }; tempGenerationContainer.Add(newChild); } else { tempGenerationContainer.Add(ch); } } } _currGeneration = tempGenerationContainer.OrderByDescending(s => s.Fitness).Take(this.PopulationSize).Reverse().ToList(); //... }
ãã®æ¹æ³ã§ã¯ãéžæãè¡ãããŸãã ã«ãŒã¬ããã®å©ããåããŠãããã§ã¯äž¡æ¹ã®èŠªãéžæããŸããã§ããã æåã®èŠªã¯ãé©æ Œãªå人ã®ååæªæºããé ã«éžæãããŸãã 2çªç®ã®èŠªã¯æ¢ã«ã©ã³ãã ã«éžæãããŠããŸãã ããã«ãéºäŒåã®2çªç®ã®èŠªãæåã®èŠªã«è¿ãå ŽåãéºäŒåãååã«ç°ãªã芪ãåŸããããŸã§ã©ã³ãã ãµã³ããªã³ã°ãç¹°ãè¿ãããŸãã 次ã«ã亀é æé ãã©ã³ãã ã«éå§ãããæ··åéºäŒåãæã€ãã1人ã®å人ãšãéºäŒåå€ã芪ã®éºäŒåã®å€ã®å¹³åãšããŠéžæããããã1人ãäžããããŸãã
TODOïŒãããããå¹³åã®èšç®ãã芪ã®éºäŒåã®å€ã®éã®ç¯å²ã®ä¹±æ°ã®èšç®ã«çœ®ãæããå¿ èŠããããŸãã
æ°ããåäœãè¶ ããåŸããã£ãããã¹ã®å€ã¯double.NaNã«ãªããŸãã æ°ããåäœã®é©å¿åºŠå€ã®å®çŸã¯ãåã³äžŠè¡ããŠè¡ãããŸã
foreach (var ch in children.AsParallel()) { if (double.IsNaN(ch.Fitness)) { var fitness = FitnessFunction(ch); var newChild = new Specimen { //... }; tempGenerationContainer.Add(newChild); } //... }
èšåãã䟡å€ã®ããæåŸã®GAãšã³ãžã³ã¡ãœããã¯ãRouletteSelectionã¡ãœããã§ãã
private int RouletteSelection() { double randomFitness = Rnd.NextDouble() * TotalFitness; int idx = -1; int first = 0; int last = this.PopulationSize - 1; int mid = (last - first) / 2; while (idx == -1 && first <= last) { if (randomFitness < _fitnessTable[mid]) { last = mid; } else if (randomFitness > _fitnessTable[mid]) { first = mid; } else if (randomFitness == _fitnessTable[mid]) { return mid; } mid = (first + last) / 2; // lies between i and i+1 if ((last - first) == 1) { idx = last; } } return idx; }
ãã®æ¹æ³ã§ã¯ãååå²æ³ã䜿çšããŠãã©ã³ãã ã«éžæãããå€ã該åœãããã£ãããã¹ããŒãã«å ã®ã»ã°ã¡ã³ããæ€çŽ¢ããŸãã ç¹°ãè¿ããŸãããä¹±æ°ã¯ãŒããããã¹ãŠã®é©å¿ã®åèšãŸã§ã®ç¯å²ã§éžæãããŸãã ç¹å®ã®å人ã®ãã£ãããã¹ã倧ããã»ã©ãã©ã³ãã ã«éžæããããã£ãããã¹å€ãããŒãã«ã®å¯Ÿå¿ããã»ã°ã¡ã³ãã«åé¡ãããå¯èœæ§ãé«ããªããŸãã ãã®ããã«ãç®çã®ã€ã³ããã¯ã¹ã¯éåžžã«é«éã§ãã
Federated FCT Simulator
åè¿°ã®ãšããããã§ãã¬ãŒã·ã§ã³ãã£ã«ã¿ãŒã·ãã¥ã¬ãŒã¿ãŒã¯FedKfSimã¯ã©ã¹ã«ãã£ãŠå®è£ ãããŸãã ãã®äž»ãªã¡ãœããã¯Simulateã¡ãœããã§ãã
public static double SimulateïŒæšæ¬ä»æ§ïŒ
public static double Simulate(Specimen spec) { var fkf = spec.ToFedKf(); var meas = new double[4]; ... var err = 0.0; int lng = Math.Min(Signals.RowCount, MaxSimLength); var results = new Vector3[lng]; results[0] = new Vector3 { X = 0.0, Y = 0.0, Z = 0.0 }; for (int i = 0; i < lng; i++) { var sigRow = Signals.Row(i); var noiseRow = Noises.Row(i); var targRow = Targets.Row(i); meas[0] = sigRow[0] + noiseRow[0]; meas[1] = sigRow[1] + noiseRow[1]; meas[2] = sigRow[2] + noiseRow[2]; meas[3] = sigRow[3] + noiseRow[3]; var res = fkf.Step(meas, inps.ToColumnWiseArray()); // inps var errs = new double[] { res[0, 0] - targRow[0], res[1, 0] - targRow[1], res[2, 0] - targRow[2] }; err += (errs[0] * errs[0]) + (errs[1] * errs[1]) + (errs[2] * errs[2])/3.0; results[i] = new Vector3 { X = res[0, 0], Y = res[1, 0], Z = res[2, 0] }; ... } ... return 1/err*lng; }
ãã®ã¡ãœããã¯ãå埩ããã»ã¹ãéå§ããŸãã åã¹ãããã§ãã»ã³ãµãŒä¿¡å·ã®çŽç²ãªå€ããã€ãºãããã³åºæºå€ïŒãã€ãºã®ãªããããã¯å é床ïŒãéžæãããŸãã çŽç²ãªä¿¡å·ã¯ãã€ãºãšå ç®ããããã®æ··åã¯é£éŠãã£ã«ã¿ãŒã®ã¹ãããã¡ãœããã«éãããŸãã åã®ã¹ãããããã®ãããã¯ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ã®è©äŸ¡ã衚瀺ãããŸããããããã®å€ã¯ãã©ã€ããŒãFCTã®çŸåšã®å®è£ ã§ã¯äœ¿çšãããŸããã é£åãã£ã«ã¿ãŒã®Stepã¡ãœããã¯ãå€ã®é åïŒãããã¯ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ã®æšå®å€ïŒãçæããŸãã ããããšåºæºå€ãšã®å·®ãçŸåšã®æšå®èª€å·®ã«ãªããŸãã çŸåšã®ã¹ãããã®æåŸã«ãæšå®èª€å·®ã®å¹³åäºä¹ãèšç®ãããçµæã®å€ã誀差ã®åèšã«å ç®ãããŸãã å埩ã®æåŸã«ãããã»ã¹ã®ãã¹ãŠã®ã¹ãããã®å¹³åãšã©ãŒå€ãèšç®ãããŸãã åºåã¯ãå¹³å誀差ã®éæ°ã§ãã
å®è¡å¯èœã¢ããªã±ãŒã·ã§ã³
ã¢ããªã±ãŒã·ã§ã³ã®ã·ãŒã±ã³ã¹ã¯æ¬¡ã®ãšããã§ãã æåã«ãã³ã³ãœãŒã«åŒæ°ããã§ãã¯ãããŸãã åŒæ°ãªã¹ãã空ã§ãªãå Žåãæå¹ãªã³ãã³ãã®ãããããå®è¡ããããšããŸãã
switch (cmd) { case "simulate": case "simulation": InitializeSimulator(); FedKfSim.PrintSimResults = true; var spec = new Specimen(); SpecimenHelper.SetGenes(ref spec, ReadSimulationGenes()); FedKfSim.Simulate(spec); break; case "set": var settingName = args[1]; var settingValue = args[2]; var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); config.AppSettings.Settings[settingName].Value = settingValue; config.Save(ConfigurationSaveMode.Modified); ConfigurationManager.RefreshSection("appSettings"); Console.WriteLine("'{0}' set to {1}", settingName, settingValue); break; case "print": Console.WriteLine("Current settings:"); foreach (var name in ConfigurationManager.AppSettings.AllKeys.AsParallel()) { var value = ConfigurationManager.AppSettings[name]; Console.WriteLine("'{0}' => {1}", name, value); } break; case "help": case "?": case "-h": PrintHelp(); break; default: Console.Error.WriteLine(string.Format("\nARGUMENT ERROR\n'{0}' is unknown command!\n", cmd)); PrintHelp(); break; }
Simulateã³ãã³ãã䜿çšãããšããã§ãã¬ãŒã·ã§ã³FCTãçæããéºäŒåã®å€ãæ§æãã¡ã€ã«ããå·®ãåŒãããŸãã ãsetãã³ãã³ãã¯ãã¡ã€ã³ã¢ããªã±ãŒã·ã§ã³æ§æãã¡ã€ã«ã®å€ã®1ã€ãå€æŽããããšãç®çãšããŠããŸãã ãprintãã³ãã³ãã«ãããã¡ã€ã³èšå®ãã¡ã€ã«ã®ãã¹ãŠã®èšå®å€ãã³ã³ãœãŒã«ã«è¡šç€ºãããŸãã helpã³ãã³ãã¯ãåºæ¬çãªããã¥ã¡ã³ããã³ã³ãœãŒã«ã«è¡šç€ºããŸãã
åŒæ°ãªãã§ã¢ããªã±ãŒã·ã§ã³ãèµ·åãããšãã¡ã€ã³ãšã³ãžã³æäœãã©ã¡ãŒã¿ãŒãæ§æãã¡ã€ã«ããå·®ãåŒããããããªãã¯ã¹ãä¿¡å·ããã€ãºãããã³ããŒã¿ãã¡ã€ã«ããã®åç §ã®å€ãåŒãç®ãããŸãã å¿ èŠãªãã¹ãŠã®ããŒã¿ãšãã©ã¡ãŒã¿ãŒãèªã¿èŸŒãã åŸããªããã£ãã€ã¶ãŒã€ã³ã¹ã¿ã³ã¹ãäœæãããé²åããã»ã¹ãéå§ãããŸãã
InitializeSimulator(); var genCount = int.Parse(ConfigurationManager.AppSettings["GenerationsCount"]); var popSize = int.Parse(ConfigurationManager.AppSettings["PopulationSize"]); var crossOver = double.Parse(ConfigurationManager.AppSettings["CrossoverRate"], FileParser.NumberFormat); var mutRate = double.Parse(ConfigurationManager.AppSettings["MutationRate"], FileParser.NumberFormat); var maxGeneVal = double.Parse(ConfigurationManager.AppSettings["MaxGeneValue"], FileParser.NumberFormat); var minGeneVal = double.Parse(ConfigurationManager.AppSettings["MinGeneValue"], FileParser.NumberFormat); var genomeLength = int.Parse(ConfigurationManager.AppSettings["GenomeLength"]); SpecimenHelper.SimilarityThreshold = double.Parse( ConfigurationManager.AppSettings["SimilarityThreshold"], FileParser.NumberFormat); var ga = new Ga(genomeLength) { FitnessFunction = FedKfSim.Simulate, Elitism = true, GenerationsCount = genCount, PopulationSize = popSize, CrossoverRate = crossOver, MutationRate = mutRate }; FedKfSim.PrintSimResults = false; ga.Go(maxGeneVal, minGeneVal);
ReadSignalsAndNoisesã¡ãœããã«ã¯ç¹ã«æ³šæãæãå¿ èŠããããŸãã
private static void ReadSignalsAndNoisesïŒïŒ
private static void ReadSignalsAndNoises() { var noisesPath = ConfigurationManager.AppSettings["NoisesFilePath"]; var signalsPath = ConfigurationManager.AppSettings["SignalsFilePath"]; var targetsPath = ConfigurationManager.AppSettings["TargetsFilePath"]; FedKfSim.Noises = new DenseMatrix(FileParser.Read4ColonFile(noisesPath)); FedKfSim.Signals = new DenseMatrix(FileParser.Read4ColonFile(signalsPath)); FedKfSim.Targets = new DenseMatrix(FileParser.Read3ColonFile(targetsPath)); var measCov = new DenseMatrix(4); double c00 = 0, c01 = 0, c02 = 0, c03 = 0, c11 = 0, c12 = 0, c13 = 0, c22 = 0, c23 = 0, c33 = 0; Vector<double> v1 = new DenseVector(1); Vector<double> v2 = new DenseVector(1); Vector<double> v3 = new DenseVector(1); Vector<double> v4 = new DenseVector(1); var s1 = new DescriptiveStatistics(new double[1]); var s2 = new DescriptiveStatistics(new double[1]); var s3 = new DescriptiveStatistics(new double[1]); var s4 = new DescriptiveStatistics(new double[1]); var t00 = Task.Run(() => { v1 = FedKfSim.Noises.Column(0); s1 = new DescriptiveStatistics(v1); c00 = s1.Variance; }); var t11 = Task.Run(() => { v2 = FedKfSim.Noises.Column(1); s2 = new DescriptiveStatistics(v2); c11 = s2.Variance; }); var t22 = Task.Run(() => { v3 = FedKfSim.Noises.Column(2); s3 = new DescriptiveStatistics(v3); c22 = s3.Variance; }); var t33 = Task.Run(() => { v4 = FedKfSim.Noises.Column(3); s4 = new DescriptiveStatistics(v4); c33 = s4.Variance; }); Task.WaitAll(new[] { t00, t11, t22, t33 }); var t01 = Task.Run(() => c01 = CalcVariance(v1, s1.Mean, v2, s2.Mean, FedKfSim.Noises.RowCount)); var t02 = Task.Run(() => c02 = CalcVariance(v1, s1.Mean, v3, s3.Mean, FedKfSim.Noises.RowCount)); var t03 = Task.Run(() => c03 = CalcVariance(v1, s1.Mean, v4, s4.Mean, FedKfSim.Noises.RowCount)); var t12 = Task.Run(() => c12 = CalcVariance(v2, s2.Mean, v3, s3.Mean, FedKfSim.Noises.RowCount)); var t13 = Task.Run(() => c13 = CalcVariance(v2, s2.Mean, v4, s4.Mean, FedKfSim.Noises.RowCount)); var t23 = Task.Run(() => c23 = CalcVariance(v3, s3.Mean, v4, s4.Mean, FedKfSim.Noises.RowCount)); Task.WaitAll(new[] { t01, t02, t03, t12, t13, t23 }); measCov[0, 0] = c00; measCov[0, 1] = c01; measCov[0, 2] = c02; measCov[0, 3] = c03; measCov[1, 0] = c01; measCov[1, 1] = c11; measCov[1, 2] = c12; measCov[1, 3] = c13; measCov[2, 0] = c02; measCov[2, 1] = c12; measCov[2, 2] = c22; measCov[2, 3] = c23; measCov[3, 0] = c03; measCov[3, 1] = c13; measCov[3, 2] = c23; measCov[3, 3] = c33; FedKfSim.SensorsOutputCovariances = measCov; }
ããã€ãã®åå¥ã®doubleå€æ°ã䜿çšããŠãå ±åæ£å€ãä¿åããŸãã äžèšã§æžããããã«ã1ã€ã®é åã䜿çšãããšã䞊åã¿ã¹ã¯ïŒã¿ã¹ã¯ïŒã®å®è¡ãé ããªããŸãã å®éãããã¯ç§ããã®ã¡ãœããã®æåã®å®è£ ã§æãã€ãããã®ã§ãã åã¿ã¹ã¯å ã§ã€ã³ããã¯ã¹ãèšå®ããããã«åŸã£ãŠãååŸããå ±åæ£å€ãå ±éã®é åã«ç»é²ããå¿ èŠããããŸããã ãããŠããã®èŠ³ç¹ãããã³ãŒãã¯äžèŠå®å šã§ããã ããããããã¯éåžžã«ãã£ãããšè¡ãããŸããã é åãåã ã®å€æ°ã«çœ®ãæããåŸãå ±åæ£è¡åã®èšç®ãå€§å¹ ã«å éãããŸããã
ããã§ã¯ããã®ã¡ãœããã§äœãè¡ãããŸããïŒ 2è¡ã®ãã€ãºã®äžæã®çµã¿åããããšã«ãåå¥ã®éåæã¿ã¹ã¯ãäœæãããŸãã ãããã®åé¡ã§ã¯ã2ã€ã®ã©ã³ãã ããã»ã¹ã®çžäºå€åãèšç®ãããŸãã
private static double CalcVariance(IEnumerable<double> v1, double mean1, IEnumerable<double> v2, double mean2, int length) { var zipped = v1.Take(length).Zip(v2.Take(length), (i1, i2) => new[] { i1, i2 }); var sum = zipped.AsParallel().Sum(z => (z[0] - mean1) * (z[1] - mean2)); return sum / (length - 1); }
ãã®åŒã¯ãåæ£èšç®åŒã«äŒŒãŠããŸãã 1ã€ã®ã©ã³ãã ãªç³»åã®å¹³åããã®åå·®ã®2ä¹ã®ä»£ããã«ã2ã€ã®å¥ã ã®ç³»åã®å¹³åå€ããã®åå·®ã®ç©ã䜿çšãããŸããïŒ
ãœãŒã¹ããŒã¿
ããã°ã©ã ã®åæããŒã¿ã¯ããã€ãºãã»ã³ãµãŒä¿¡å·ããããã¯å é床æåã®çã®å€ãããã³ãã£ã«ã¿ãŒãã©ã¡ãŒã¿ãŒã®æ°å€ã·ãªãŒãºã§ãïŒæ¹åäœåŒŠã®è¡åïŒç§ã®åæ¥ãããžã§ã¯ãããååŸã以åã®èšäºã®1ã€ã§èª¬æããåé·ãããã¯ã®æ§æã«å¯Ÿå¿ïŒãå ±åæ£è¡åããã»ã¹ãã€ãºïŒçµéšçã«èšå®ïŒã
ãããã¯å é床ã®åºæºå€ã¯ã2ã€ã®æ£åŒŠæ³¢ã®çµã¿åãããšããŠèšå®ãããŸããã ãããã¯ã®ã¬ã€ãã³ãµã€ã³ã®ãããªãã¯ã¹ãä»ãããããã®å€ã¯ãã»ã³ãµãŒä¿¡å·ã«å€æãããŸããã ã»ã³ãµãŒãã€ãºã¯ãã€ããªããæ¹åŒã§çæãããŸããã é²é³äžã«äŒãã§ããå®éã®ã»ã³ãµãŒã®ä¿¡å·ãé²é³ããŸããã ãã®ä¿¡å·ããäžå®ã®æåãé€å»ãããšãéçãªã»ã³ãµãŒãã€ãºãåŸãããŸããïŒã¢ã«ãŽãªãºã ã®ãããã°ã«ã¯ããã§ååã§ãïŒã ã¡ãªã¿ã«ããããã®ãã€ãºã¯æ£èŠååžã§çœã«éåžžã«è¿ãã£ãã ãããã®ãã€ãºã1000ã®å€ã®çããµã³ãã«ã«ã«ãããã匷床ãã¹ã±ãŒãªã³ã°ããŠåæ£ãç¯å²[0.05..0.15]ã«ããŸããã ãããã£ãŠãç§ã¯ç 究ã§å®éã®ãã€ãºã䜿çšãããšèšããŸãã
çµæ

çæãããé£éŠãã£ã«ã¿ãŒã¯ãå¹³åãã€ãºåæ£ãã»ãŒååã«åæžããŸããïŒã€ãŸããäºä¹å¹³å誀差ãçŽ1.38ååæžããŸããïŒã æ £æ§ãå¢ããããšã§ã誀差ã®åæ£ãããã«å€§å¹ ã«æžããããšãã§ããŸãããåçé 延ãå¢å ããŸãã ç§ã®æèŠã§ã¯ãGAã䜿çšããŠå®å šã«åäœå¯èœãªãã€ãºãã£ã«ã¿ãŒãçæãããŸããã
ãããã«
ç§ã«ã¯äœæãããŸããªãã®ã§ãã¡ã€ã³æ©èœãå®è£ ãããšããå®ç§äž»çŸ©ã®æéã¯ãããŸããã§ããã äžéšã®å Žæã§ã¯ãã³ãŒãã«ã»ãã¥ãªãã£äžã®æ¬ é¥ããããŸãïŒããã¯äž»ã«åŒæ°ã®æ€èšŒã«é¢ãããã®ã§ãïŒ;äžéšã®å Žæã§ã¯ããCïŒã³ãŒãã¹ã¿ã€ã«ã¬ã€ããã®äžè¬çãªæšå¥šäºé ã«åŸã£ãŠããŸããã 確ãã«ãæé©ã§ã¯ãªãããã©ãŒãã³ã¹ã®ã³ãŒããããã¯ããããŸãã ãããããã¹ãŠã®æ¬ ç¹ã«ãããããããéåžžã«ããŸãæ©èœããŸãã Intel Core i3 CPUã§ãã¹ããããšãããæé©åããã»ã¹ã¯éåžžã«é«éã§ããã ããã«ãTPLã®äœ¿çšã«ãããããã»ããµãªãœãŒã¹ãéåžžã«å¹ççã«äœ¿çšãããŸããã å®è£ ãããã¢ã«ãŽãªãºã ã¯ãããã»ããµã®ç©ºãæéã®ã»ãŒãã¹ãŠãæ¶è²»ããŸããããéåæTPLã¿ã¹ã¯ã®éåžžã®åªå 床ã«ãããæ®ãã®ãŠãŒã¶ãŒããã°ã©ã ã¯æ·±å»ãªããã¯ãªãã§æ©èœããŸããã å®è£ ãããããã°ã©ã ãã³ã³ãœãŒã«ã§èµ·åããçµã¿èŸŒã¿ã®ãªãŸã«ããŒã䜿çšããŠVisual Studio 2012ã§åäœããããã«åãæ¿ããOutlookãšMS Wordã«å®æçã«åãæ¿ããIEãšChromeãã©ãŠã¶ãŒã§äžŠè¡ããŠäœæ¥ãããžã§ã¯ãããããã°ããŸããã äžè¬ã«ãããã¯TPLéåæããã°ã©ãã³ã°ã©ã€ãã©ãªã䜿çšããè¯ãçµéšã§ãããæ·±å»ãªåé¡ãªãã«ããã«è¯ãçµæãåŸãããŸããã
ãæž èŽããããšãããããŸããïŒ ãã®èšäºãšã³ãŒããã圹ã«ç«ãŠã°å¹žãã§ãã
GithubãœãŒã¹ ïŒ github.com/homoluden/fedkf-ga