Pythonã§éºäŒçããã°ã©ãã³ã°ã®åãè§£ãæŸã¡ãŸããããé²åã¢ã«ãŽãªãºã èšèšãã³ã¢ã³ã³ã»ãããå®çšäŸãäž»èŠã©ã€ãã©ãªãæ¢æ±ããå°çèŠæš¡ã®è€éãªèª²é¡ã解決ããŸãã
PythonéºäŒçããã°ã©ãã³ã°ïŒè€éãªåé¡è§£æ±ºã®ããã®é²åã¢ã«ãŽãªãºã èšèš
è€éãªããŒã¿ãšåçãªç°å¢ã«ãã£ãŠãŸããŸã圢äœãããäžçã«ãããŠãåŸæ¥ã®ã¢ã«ãŽãªãºã ã¢ãããŒãã¯ãã°ãã°éçã«éããŸããã°ããŒãã«ãµãã©ã€ãã§ãŒã³ã®æé©åãããæ°ããç§åŠç仮説ã®çºèŠãé©å¿å人工ç¥èœã®èšèšãŸã§ãå€ãã®èª²é¡ã¯åŸæ¥ã®ã«ãŒã«ããŒã¹ãŸãã¯ç¶²çŸ çãªæ€çŽ¢æ¹æ³ã§ã¯è§£æ±ºãå°é£ã§ããããã§ç»å Žããã®ãéºäŒçããã°ã©ãã³ã°ïŒGPïŒã§ããããã¯ãèªç¶æ·æ±°ã®ååãæŽ»çšããŠãè€éãªåé¡ã解決ã§ããã³ã³ãã¥ãŒã¿ããã°ã©ã ãèªåçæãã匷åãªãã©ãã€ã ã§ãããããŠããã®åºç¯ãªæ¡çšãšé©æ°ã®äžå¿ã«ããã®ãPythonã§ããèªã¿ããããæ±çšæ§ããããŠè±å¯ãªç§åŠã©ã€ãã©ãªã®ãšã³ã·ã¹ãã ã§ç¥ãããèšèªã§ãã
ãã®ãå æ¬çãªãã¬ã€ãã§ã¯ãPythonéºäŒçããã°ã©ãã³ã°ã®é åçãªé åãæ·±ãæãäžããŸããé²åã¢ã«ãŽãªãºã èšèšã®åºæ¬æŠå¿µãæ¢ããGPã·ã¹ãã æ§ç¯ã®å®è·µçãªã¹ããããæ©ã¿ããã®å€æ§ãªã°ããŒãã«ã¢ããªã±ãŒã·ã§ã³ãæ€èšŒãããã®æå 端åéãå¯èœã«ããäž»èŠãªPythonã©ã€ãã©ãªã玹ä»ããŸããããŒã¿ãµã€ãšã³ãã£ã¹ãããœãããŠã§ã¢ãšã³ãžãã¢ãç ç©¶è ããŸãã¯åãªããã¯ãããžãŒæå¥œå®¶ã§ãã£ãŠããPythonã«ããGPãçè§£ããããšã¯ã人é¡ãçŽé¢ããæãå·®ãè¿«ã£ã課é¡ã®ããã€ãã«é©æ°çãªãœãªã¥ãŒã·ã§ã³ãžã®æãéããŸãã
éºäŒçããã°ã©ãã³ã°ãšã¯äœãïŒé²åè«çèŠç¹
éºäŒçããã°ã©ãã³ã°ã¯ããã£ãŒã«ãºã»ããŒãŠã£ã³ã®èªç¶æ·æ±°èª¬ã«è§Šçºãããé²åèšç®ã®äžåéã§ããè§£ãæç€ºçã«ããã°ã©ãã³ã°ããã®ã§ã¯ãªããGPã¯åè£ããã°ã©ã ã®éå£ãé²åãããéžæã亀差ïŒçµã¿æãïŒãçªç¶å€ç°ãšãã£ãçç©åŠçé²åã«äŒŒãããã»ã¹ãéããŠããããå埩çã«æ¹è¯ããŸããç®æšã¯ãæé©ãªããã°ã©ã ã®æ£ç¢ºãªæ§è³ªãäžæãªå Žåã§ããæå®ãããã¿ã¹ã¯ãæé©ãŸãã¯ã»ãŒæé©ã«å®è¡ããããã°ã©ã ãçºèŠããããšã§ãã
GPãšéºäŒçã¢ã«ãŽãªãºã ïŒGAïŒã®åºå¥
ãã°ãã°æ··åãããŸãããéºäŒçããã°ã©ãã³ã°ãšéºäŒçã¢ã«ãŽãªãºã ïŒGAïŒã®éããçè§£ããããšã¯éèŠã§ããã©ã¡ããé²åã¢ã«ãŽãªãºã ã§ãããé²åããã察象ãç°ãªããŸãã
- éºäŒçã¢ã«ãŽãªãºã ïŒGAïŒïŒ éåžžãåé¡ã®ãã©ã¡ãŒã¿ãŸãã¯ç¹å®ã®è§£ã衚ãåºå®é·ã®æååïŒå€ãã¯ãã€ããªãŸãã¯æ°å€ïŒãé²åãããŸããäŸãã°ãGAã¯ãã¥ãŒã©ã«ãããã¯ãŒã¯ã®éã¿ã補é ã¿ã¹ã¯ã®ã¹ã±ãžã¥ãŒã«ãæé©åããå¯èœæ§ããããŸããè§£ã®æ§é ã¯äºåã«å®çŸ©ãããŠãããå€ã®ã¿ãé²åããŸãã
- éºäŒçããã°ã©ãã³ã°ïŒGPïŒïŒ ãµã€ãºã圢ç¶ãè€éããç°ãªãã³ã³ãã¥ãŒã¿ããã°ã©ã èªäœãé²åãããŸãããããã®ããã°ã©ã ã¯ãå éšããŒãã颿°ïŒäŸïŒç®è¡æŒç®åãè«çæ¡ä»¶ïŒãèããŒããçµç«¯ïŒäŸïŒå€æ°ã宿°ïŒã§ããããªãŒæ§é ãšããŠè¡šçŸãããããšããããããŸããGPã¯ãæé©ãªãã©ã¡ãŒã¿ã ãã§ãªããæé©ãªããã°ã©ã æ§é ãæ¢çŽ¢ããŸãããã®ãããªä»»æã®æ§é ãé²åãããèœåã«ãããGPã¯è§£ã®åœ¢åŒãäžæãŸãã¯éåžžã«å€åããå Žåã®åé¡ã«å¯ŸããŠãæ°ãããœãªã¥ãŒã·ã§ã³ãçºèŠããããã«éåžžã«åŒ·åã§ãã
ããŒã¿ã»ãããèšè¿°ããæé©ãªæ°åŠçå
¬åŒãèŠã€ããããšããŠãããšæ³åããŠãã ãããGAã¯ãax^2 + bx + cã®ãããªäºåã«å®çŸ©ãããå€é
åŒã®ä¿æ°ãæé©åãããããããŸãããããããGPã¯æ°åŒå
šäœãé²åãããäºåã«ãã®åœ¢åŒã«ã€ããŠä»®å®ããããšãªããsin(x) * log(y) + 3*zã®ãããªãã®ãèŠã€ããå¯èœæ§ããããŸãããããGPã®åºæ¬çãªåã§ãã
éºäŒçããã°ã©ãã³ã°ã«ãããPythonã®æ¯é¡ãªãå
人工ç¥èœãæ©æ¢°åŠç¿ãç§åŠèšç®ã«ãããPythonã®æ¯é çãªèšèªãšããŠã®å°é ã¯å¶ç¶ã§ã¯ãããŸããããã®åºæã®ç¹æ§ã«ãããéºäŒçããã°ã©ãã³ã°ã®å®è£ ãšå®éšã«çæ³çãªç°å¢ãšãªã£ãŠããŸãã
- å¯èªæ§ãšã·ã³ãã«ãïŒ Pythonã®æç¢ºã§è±èªã®ãããªæ§æã¯ãè€éãªã¢ã«ãŽãªãºã ãçè§£ããããã®èªç¥è² è·ã軜æžããç ç©¶è ãéçºè ãå®åã³ãŒãã§ã¯ãªãé²åè«çããžãã¯ã«éäžã§ããããã«ããŸãã
- åºç¯ãªãšã³ã·ã¹ãã ãšã©ã€ãã©ãªïŒ é«å質ãªã©ã€ãã©ãªã®èšå€§ãªã³ã¬ã¯ã·ã§ã³ãå©çšå¯èœã§ããç¹ã«GPã®å ŽåãDEAPïŒDistributed Evolutionary Algorithms in PythonïŒã®ãããªãã¬ãŒã ã¯ãŒã¯ã¯ãå ç¢ã§æè»ããã€å¹ççãªããŒã«ãæäŸããŸããNumPyãSciPyãPandasãªã©ã®äžè¬çãªç§åŠã©ã€ãã©ãªã¯ãé©å¿åºŠé¢æ°ã®è©äŸ¡ã«äžå¯æ¬ ãªããŒã¿åŠçãšæ°å€æŒç®ã容æã«ããŸãã
- è¿ éãªãããã¿ã€ãã³ã°ãšå®éšïŒ GPç ç©¶ã®å埩çãªæ§è³ªã¯ãPythonãæ°ããã¢ã€ãã¢ã仮説ã®è¿ éãªéçºãšãã¹ããå¯èœã«ããèœåãã倧ããæ©æµãåããŸããããã«ãããã¢ã«ãŽãªãºã èšèšãä¿®æ£ãè©äŸ¡ã®ãµã€ã¯ã«ãå éãããŸãã
- æ±çšæ§ãšçµ±åïŒ Pythonã®æ±çšæ§ã«ãããGPãœãªã¥ãŒã·ã§ã³ã¯ãWebã¢ããªã±ãŒã·ã§ã³ãããŒã¿ãã€ãã©ã€ã³ãæ©æ¢°åŠç¿ãã¬ãŒã ã¯ãŒã¯ãªã©ããã倧ããªã·ã¹ãã ã«ã·ãŒã ã¬ã¹ã«çµ±åã§ããŸããããã¯ãéèãããã«ã¹ã±ã¢ããšã³ãžãã¢ãªã³ã°ãŸã§ãããŸããŸãªæ¥çã®å®éã®éçšç°å¢ã§é²åãããœãªã¥ãŒã·ã§ã³ãå±éããããã«éèŠã§ãã
- ã³ãã¥ããã£ãµããŒãïŒ å€§èŠæš¡ã§æŽ»çºãªã°ããŒãã«ã³ãã¥ããã£ã¯ãPythonã®ã©ã€ãã©ãªãããã¥ã¡ã³ããåé¡è§£æ±ºãã©ãŒã©ã ã«è²¢ç®ããŠãããGPã®åå¿è ãšäžçŽå®è·µè ã®äž¡æ¹ã«è²ŽéãªãµããŒããæäŸããŠããŸãã
ãããã®å©ç¹ãçµã¿åãããããšã§ãPythonã¯ãåŠè¡ç ç©¶ãšç£æ¥å¿çšã®äž¡æ¹ã§éºäŒçããã°ã©ãã³ã°ã®æšæºèšèªãšãªãã倧éžãåéãè¶ããã€ãããŒã·ã§ã³ãå¯èœã«ããŠããŸãã
éºäŒçããã°ã©ãã³ã°ã«ãããé²åã¢ã«ãŽãªãºã ã®ã³ã¢ã³ã³ã»ãã
广çãªé²åã¢ã«ãŽãªãºã ãèšèšããã«ã¯ãGPã®åºæ¬çãªæ§æèŠçŽ ãçè§£ããããšãäžå¯æ¬ ã§ãããããã®ã³ã¢ã³ã³ããŒãã³ããåè§£ããŠã¿ãŸãããã
1. åäœãšããã°ã©ã 衚çŸ
GPã§ã¯ããåäœãã¯åé¡ã解決ããããšããåè£ããã°ã©ã ã§ãããããã®ããã°ã©ã ã¯ãæãäžè¬çã«ããªãŒæ§é ãšããŠè¡šçŸãããŸãã(X + 2) * Yã®ãããªåçŽãªæ°åŠç衚çŸãèããŠã¿ãŸããããããã¯ããªãŒãšããŠè¡šçŸã§ããŸãã
*
/ \
+ Y
/ \
X 2
- å
éšããŒãïŒé¢æ°ïŒïŒ ãããã¯1ã€ä»¥äžã®åŒæ°ãåãåããå€ãè¿ãæäœã§ããäŸãšããŠã¯ãç®è¡æŒç®åïŒ
+ã-ã*ã/ïŒãæ°åŠé¢æ°ïŒsinãcosãlogïŒãè«çæŒç®åïŒANDãORãNOTïŒããŸãã¯ãã¡ã€ã³åºæã®é¢æ°ããããŸãã - èããŒãïŒçµç«¯ïŒïŒ ãããã¯ããã°ã©ã ã®å
¥åãŸãã¯å®æ°ã§ããäŸãšããŠã¯ã倿°ïŒ
XãYïŒãæ°å€å®æ°ïŒ0ã1ã2.5ïŒããŸãã¯ããŒã«å€ïŒTrueãFalseïŒããããŸãã
å©çšå¯èœãªé¢æ°ãšçµç«¯ã®ã»ããããããªããã£ãã»ãããã圢æããŸããããã¯ãGPã¢ã«ãŽãªãºã ã®æ€çŽ¢ç©ºéãå®çŸ©ããéèŠãªèšèšäžã®éžæã§ããããªããã£ãã»ããã®éžæã¯ãé²åã§ããããã°ã©ã ã®è€éããšè¡šçŸåã«çŽæ¥åœ±é¿ããŸããé©åã«éžæãããããªããã£ãã»ããã¯ã广çãªãœãªã¥ãŒã·ã§ã³ãèŠã€ããå¯èœæ§ãå€§å¹ ã«åäžãããããšãã§ããŸãããäžé©åã«éžæãããã»ããã¯ãGPã«ãšã£ãŠåé¡ã®è§£æ±ºãäžå¯èœã«ããå¯èœæ§ããããŸãã
2. éå£
é²åã¢ã«ãŽãªãºã ã¯ãåäžã®ããã°ã©ã ã§ã¯ãªããããã°ã©ã ã®éå£ã§åäœããŸãããã®å€æ§æ§ã¯ãæ€çŽ¢ç©ºéã广çã«æ¢çŽ¢ããããã«éèŠã§ããå žåçãªéå£ãµã€ãºã¯ãæ°åããæ°åã®åäœã«åã¶ããšããããŸããéå£ã倧ããã»ã©äžè¬çã«å€æ§æ§ã¯å¢ããŸãããäžä»£ãããã®èšç®ã³ã¹ãã¯é«ããªããŸãã
3. é©å¿åºŠé¢æ°ïŒå°ãã®çŸ éç€
é©å¿åºŠé¢æ°ã¯ãããããé²åã¢ã«ãŽãªãºã ãç¹ã«GPã«ãšã£ãŠæãéèŠãªã³ã³ããŒãã³ããšèšããŸããããã¯ãåã ã®ããã°ã©ã ãäžããããåé¡ãã©ãã ãããŸã解決ããããå®éåããŸããããé«ãé©å¿åºŠå€ã¯ãããåªããããã©ãŒãã³ã¹ã®ããã°ã©ã ã瀺ããŸããé©å¿åºŠé¢æ°ã¯ãã©ã®åäœãçãæ®ããç¹æ®ããå¯èœæ§ãé«ãããæ±ºå®ããé²åããã»ã¹ãå°ããŸãã
广çãªé©å¿åºŠé¢æ°ãèšèšããã«ã¯ãæ éãªæ€èšãå¿ èŠã§ãã
- ç²ŸåºŠïŒ èšå·ååž°ãåé¡ã®ãããªã¿ã¹ã¯ã§ã¯ãé©å¿åºŠã¯ããã°ã©ã ã®åºåãšã¿ãŒã²ããå€ã®ç²ŸåºŠã«çŽæ¥é¢ä¿ããŸãã
- å®å šæ§ïŒ åé¡ã®é¢é£ãããã¹ãŠã®åŽé¢ãã«ããŒããå¿ èŠããããŸãã
- èšç®å¹çïŒ é©å¿åºŠé¢æ°ã¯ãæœåšçã«æ°çŸäžåè©äŸ¡ããããããèšç®å¯èœã§ããå¿ èŠããããŸãã
- ã¬ã€ãã³ã¹ïŒ çæ³çã«ã¯ãé©å¿åºŠã©ã³ãã¹ã±ãŒãã¯ãæé©ãªãã¹ãäžæãªå Žåã§ããé²åæ€çŽ¢ã«åŸé ãæäŸããã®ã«ååæ»ããã§ããã¹ãã§ãã
- ããã«ãã£ïŒ ããã°ã©ã ã®è€éãïŒããããŒããã軜æžããããïŒãå¶çŽéåãªã©ãæãŸãããªãç¹æ§ã«å¯Ÿããããã«ãã£ãçµã¿èŸŒãŸããããšããããŸãã
é©å¿åºŠé¢æ°ã®äŸïŒ
- èšå·ååž°ïŒ ããã°ã©ã ã®åºåãšã¿ãŒã²ããå€ã®éã®äºä¹å¹³å誀差ïŒMSEïŒãŸãã¯äºä¹å¹³åå¹³æ¹æ ¹èª€å·®ïŒRMSEïŒã
- åé¡ïŒ 粟床ãF1ã¹ã³ã¢ãROCæ²ç·ïŒReceiver Operating CharacteristicïŒã®äžã®é¢ç©ã
- ã²ãŒã AIïŒ ã²ãŒã ã§éæãããã¹ã³ã¢ãçåæéãåããã察æŠçžæã®æ°ã
- ããããå·¥åŠïŒ ç§»åè·é¢ããšãã«ã®ãŒå¹çãã¿ã¹ã¯å®äºçã
4. éžæïŒèŠªã®éžæ
éå£å ã®ãã¹ãŠã®åäœã®é©å¿åºŠãè©äŸ¡ããåŸãéžæã¡ã«ããºã ãã©ã®ããã°ã©ã ãæ¬¡ã®äžä»£ã®ã芪ããšããŠæ©èœããããæ±ºå®ããŸããããé©å¿åºŠã®é«ãåäœã¯éžæããã確çãé«ããªããŸããäžè¬çãªéžææ¹æ³ã«ã¯ä»¥äžãå«ãŸããŸãã
- ããŒãã¡ã³ãéžæïŒ éå£ããã©ã³ãã ã«éžã°ããå°æ°ã®åäœïŒãããŒãã¡ã³ããµã€ãºãïŒã®äžãããæãé©å¿åºŠã®é«ãåäœã芪ãšããŠéžæãããŸããããã¯ãå¿ èŠãªæ°ã®èŠªãéžæããããŸã§ç¹°ãè¿ãããŸããå ç¢ã§åºã䜿çšãããŠããŸãã
- ã«ãŒã¬ãããã€ãŒã«éžæïŒé©å¿åºŠæ¯äŸéžæïŒïŒ åäœã¯ããã®é©å¿åºŠã«æ¯äŸãã確çã§éžæãããŸããæŠå¿µçã«ã¯ãã«ãŒã¬ãããã€ãŒã«ãå転ããååäœããã®é©å¿åºŠã«æ¯äŸããã¹ã©ã€ã¹ãå ããŸãã
- ã©ã³ã¯ããŒã¹éžæïŒ åäœã¯é©å¿åºŠã«ãã£ãŠã©ã³ã¯ä»ããããéžæç¢ºçã¯çµ¶å¯Ÿçãªé©å¿åºŠå€ã§ã¯ãªããã©ã³ã¯ã«åºã¥ããŠããŸããããã«ãããéåžžã«é©å¿åºŠã®é«ãå°æ°ã®åäœã«ããæ©æåæãé²ãã®ã«åœ¹ç«ã¡ãŸãã
5. éºäŒåæŒç®åïŒæ°ããåäœã®äœæ
芪ãéžæããããšãéºäŒåæŒç®åãé©çšãããæ¬¡ã®äžä»£ã®åäŸãäœæãããŸãããããã®æŒç®åã¯å€æ§æ§ãå°å ¥ããéå£ãæ°ãããœãªã¥ãŒã·ã§ã³ãæ¢çŽ¢ã§ããããã«ããŸãã
a. 亀差ïŒçµã¿æãïŒ
亀差ã¯ã2ã€ã®èŠªããã°ã©ã ã®éºäŒåææãçµã¿åãããŠã1ã€ä»¥äžã®æ°ããåäŸããã°ã©ã ãäœæããŸããããªãŒããŒã¹ã®GPã§ã¯ãæãäžè¬çãªåœ¢åŒã¯ãµãããªãŒäº€å·®ã§ãã
- 2ã€ã®èŠªããã°ã©ã ãéžæãããŸãã
- å芪ããã©ã³ãã ãªãµãããªãŒãéžæãããŸãã
- ãããã®éžæããããµãããªãŒã¯ã芪ã®éã§äº€æããã2ã€ã®æ°ããåäŸããã°ã©ã ãäœæãããŸãã
芪1: (A + (B * C)) 芪2: (D - (E / F)) 芪1ãããµãããªãŒ(B * C)ãéžæ 芪2ãããµãããªãŒ(E / F)ãéžæ å1: (A + (E / F)) å2: (D - (B * C))
亀差ã¯ãããã°ã©ã ã³ã³ããŒãã³ãã®æ°ããçµã¿åããã®æ¢çŽ¢ãå¯èœã«ããäžä»£ãè¶ ããŠæåãããã«ãã£ã³ã°ãããã¯ãäŒæãããŸãã
b. çªç¶å€ç°
çªç¶å€ç°ã¯ãåã ã®ããã°ã©ã ã«ã©ã³ãã ãªå€æŽãå°å ¥ããéºäŒç倿§æ§ãä¿èšŒãã屿æé©è§£ããã®è±åºãå©ããŸããããªãŒããŒã¹ã®GPã§ã¯ãäžè¬çãªçªç¶å€ç°ã¿ã€ãã«ã¯ä»¥äžãå«ãŸããŸãã
- ãµãããªãŒçªç¶å€ç°ïŒ ããã°ã©ã å ã®ã©ã³ãã ãªãµãããªãŒããæ°ããçæãããã©ã³ãã ãªãµãããªãŒã«çœ®ãæããããŸããããã¯å€§å¹ ãªå€æŽãå°å ¥ããå¯èœæ§ããããŸãã
- ç¹çªç¶å€ç°ïŒ çµç«¯ãå¥ã®çµç«¯ã«çœ®ãæãããããã颿°ãåãã¢ãªãã£ïŒåŒæ°ã®æ°ïŒã®å¥ã®é¢æ°ã«çœ®ãæããããŸããããã¯ãããå°ããã屿çãªå€æŽãå°å ¥ããŸãã
å ã®ããã°ã©ã : (X * (Y + 2)) ãµãããªãŒçªç¶å€ç°ïŒ(Y + 2)ãæ°ããã©ã³ãã ãµãããªãŒ(Z - 1)ã«çœ®ãæãïŒïŒ æ°ããããã°ã©ã : (X * (Z - 1)) ç¹çªç¶å€ç°ïŒ'*'ã'+'ã«çœ®ãæãïŒïŒ æ°ããããã°ã©ã : (X + (Y + 2))
çªç¶å€ç°çã¯éåžžäœããæ¢çŽ¢ã®å¿ èŠæ§ãšè¯å¥œãªãœãªã¥ãŒã·ã§ã³ã®ä¿åãšã®ãã©ã³ã¹ããšããŸãã
6. çµäºåºæº
æå®ãããçµäºåºæºãæºãããããŸã§ãé²åããã»ã¹ãç¶è¡ãããŸããäžè¬çãªåºæºã«ã¯ä»¥äžãå«ãŸããŸãã
- æå€§äžä»£æ°ïŒ ã¢ã«ãŽãªãºã ã¯ãåºå®æ°ã®å埩åŸã«åæ¢ããŸãã
- é©å¿åºŠãããå€ïŒ åäœãæå®ã®é©å¿åºŠã¬ãã«ãéæãããšãã¢ã«ãŽãªãºã ã¯åæ¢ããŸãã
- æéå¶éïŒ ã¢ã«ãŽãªãºã ã¯ãäžå®ã®èšç®æéãçµéãããšåæ¢ããŸãã
- æ¹åãªãïŒ ã¢ã«ãŽãªãºã ã¯ãéå£å ã®æè¯ã®é©å¿åºŠãäžå®äžä»£æ°æ¹åãããªãã£ãå Žåã«åæ¢ããŸãã
é²åã¢ã«ãŽãªãºã ã®èšèšïŒPythonã«ããã¹ããããã€ã¹ãããã¬ã€ã
Pythonã䜿çšããŠéºäŒçããã°ã©ãã³ã°ã·ã¹ãã ãèšèšããã³å®è£ ããå®è·µçãªã¹ããããæŠèª¬ããŸããããããã§ã¯ãPythonã«ãããé²åèšç®ã®äºå®äžã®æšæºã§ããDEAPã©ã€ãã©ãªã«ãã£ãŠæäŸãããæŠå¿µãšæ§é ãäž»ã«åç §ããŸãã
ã¹ããã1ïŒåé¡ã®å®åŒåãšããŒã¿æºå
解決ãããåé¡ãæç¢ºã«å®çŸ©ããŸããèšå·ååž°ãåé¡ãå¶åŸ¡ããŸãã¯ãã®ä»ã®ãã®ã§ããïŒããŒã¿ãåéããååŠçããŸããäŸãã°ãèšå·ååž°ã®å Žåãå ¥å倿°ïŒç¹åŸŽéïŒãšå¯Ÿå¿ããã¿ãŒã²ããå€ãå¿ èŠã«ãªããŸãã
ã¹ããã2ïŒããªããã£ãã»ããïŒé¢æ°ãšçµç«¯ïŒã®å®çŸ©
ããã§ãããã°ã©ã ã®æ§ç¯ã«äœ¿çšããããã«ãã£ã³ã°ãããã¯ãæå®ããŸããåé¡ã«é¢é£ããæ°åŠæŒç®åãè«ç颿°ãããã³å
¥å倿°/宿°ã決å®ããå¿
èŠããããŸããDEAPã§ã¯ãããã¯PrimitiveSetã䜿çšããŠè¡ãããŸãã
äŸïŒèšå·ååž°
f(x, y) = ?ã®ãããªé¢æ°ãèŠã€ããŠãããåºåzãè¿äŒŒããåé¡ã®å Žåãããªããã£ãã»ããã«ã¯ä»¥äžãå«ãŸããå¯èœæ§ããããŸãã
- 颿°ïŒ
addãsubãmulãdivïŒãŒãé€ç®ãåŠçããããã®ä¿è·ãããé€ç®ïŒ - çµç«¯ïŒ
xãyãããã³ãšãã§ã¡ã©ã«å®æ°ïŒç¯å²å ã®ã©ã³ãã ã«çæãããæ°å€ïŒã
from deap import gp
import operator
def protectedDiv(left, right):
try:
return left / right
except ZeroDivisionError:
return 1 # ãŸãã¯ãã®ä»ã®ãã¥ãŒãã©ã«ãªå€
pSet = gp.PrimitiveSet("main", arity=2) # x, yå
¥åã®ããã®arity=2
pSet.addPrimitive(operator.add, 2) # add(a, b)
pSet.addPrimitive(operator.sub, 2) # sub(a, b)
pSet.addPrimitive(operator.mul, 2) # mul(a, b)
pSet.addPrimitive(protectedDiv, 2) # protectedDiv(a, b)
pSet.addTerminal(1) # 宿°1
# åŒæ°ãæç¢ºã«ããããã«ååã倿Ž
pSet.renameArguments(ARG0='x', ARG1='y')
ã¹ããã3ïŒé©å¿åºŠé¢æ°ã®å®çŸ©
åã ã®ããã°ã©ã ïŒããªãŒãšããŠè¡šãããïŒãåãåãããã®é©å¿åºŠå€ãè¿ãPython颿°ãèšè¿°ããŸããããã«ã¯ä»¥äžãå«ãŸããŸãã
- ããã°ã©ã ããªãŒãå®è¡å¯èœãªPython颿°ã«ã³ã³ãã€ã«ããŸãã
- ãã¬ãŒãã³ã°ããŒã¿ã§ãã®é¢æ°ãå®è¡ããŸãã
- ããã°ã©ã ã®åºåãšã¿ãŒã²ããå€ã«åºã¥ããŠã誀差ãŸãã¯ã¹ã³ã¢ãèšç®ããŸãã
èšå·ååž°ã®å Žåãããã¯éåžžãäºä¹å¹³å誀差ïŒMSEïŒã®èšç®ã«ãªããŸããDEAPã¯é©å¿åºŠå€ãã¿ãã«ãšããŠæåŸ
ããããïŒäŸïŒåäžç®çæé©åã®å Žåã¯(mse,)ïŒãã¿ãã«ãè¿ãããšã«æ³šæããŠãã ããã
import numpy as np
# å®éã®ããŒã¿ã®ããã®ãã¬ãŒã¹ãã«ããŒãå®éã«ã¯ããŒããããŸãã
training_data_points = [(i, i*2) for i in range(-5, 5)] # äŸã®å
¥å
training_data_labels = [p[0]**2 + p[1] for p in training_data_points] # äŸã®ã¿ãŒã²ãã (x^2 + y)
def evalSymbReg(individual, points, labels):
# GPããªãŒãPython颿°ã«å€æããŸã
func = gp.compile(individual, pSet)
# å
¥å 'points' ã§ããã°ã©ã ãè©äŸ¡ããŸã
# é²åããããã°ã©ã ããã®å®è¡æãšã©ãŒïŒäŸïŒæ°åŠãã¡ã€ã³ãšã©ãŒïŒãåŠçããŸã
sqerrors = []
for p, l in zip(points, labels):
try:
program_output = func(p[0], p[1])
sqerrors.append((program_output - l)**2)
except (OverflowError, ValueError, TypeError): # äžè¬çãªãšã©ãŒããã£ãã
sqerrors.append(float('inf')) # ç¡å¹ãªåºåã«ã¯éãããã«ãã£ã課ããŸã
if float('inf') in sqerrors or not sqerrors: # ãã¹ãŠã®ãšã©ãŒãç¡å¹ã§ãããããšã©ãŒãèšç®ã§ããªãã£ãå Žå
return float('inf'), # ç¡éã®é©å¿åºŠãè¿ããŸã
return np.mean(sqerrors), # ã¿ãã«ãšããŠè¿ããŸã
ã¹ããã4ïŒDEAPããŒã«ããã¯ã¹ã®æ§æ
DEAP Toolboxã¯ãé²åã¢ã«ãŽãªãºã ã®ãã¹ãŠã®å¿
èŠãªã³ã³ããŒãã³ãïŒåäœäœæãéå£äœæãé©å¿åºŠè©äŸ¡ãéžæã亀差ãçªç¶å€ç°ïŒãç»é²ããã³æ§æããããã®äžå¿çãªã³ã³ããŒãã³ãã§ãã
from deap import base, creator, tools
# 1. é©å¿åºŠãšåäœã®åã®å®çŸ©
# é©å¿åºŠãæå°åããŸãïŒäŸïŒäºä¹å¹³å誀差ïŒãæå°åã®å Žåã¯weights=(-1.0,)ãæå€§åã®å Žåã¯(1.0,)
creator.create("FitnessMin", base.Fitness, weights=(-1.0,))
# åäœã¯ãå®çŸ©ãããé©å¿åºŠåãæã€gpã¢ãžã¥ãŒã«ã®PrimitiveTreeã§ã
creator.create("Individual", gp.PrimitiveTree, fitness=creator.FitnessMin)
# 2. ããŒã«ããã¯ã¹ã®åæå
toolbox = base.Toolbox()
# 3. ã³ã³ããŒãã³ãã®ç»é²
# åæéå£ã®ããã®'expr'ãžã§ãã¬ãŒã¿ãŒïŒäŸïŒramped half-and-halfã¡ãœããïŒ
# min_=1, max_=2ã¯ãããªãŒã®æ·±ãã1ãã2ã®éã§ããããšãæå³ããŸã
toolbox.register("expr", gp.genHalfAndHalf, pset=pSet, min_=1, max_=2)
# 'individual' ã¯ãªãšãŒã¿ãŒïŒ'PrimitiveTree'åãš'expr'ãžã§ãã¬ãŒã¿ãŒãçµã¿åãããŸã
toolbox.register("individual", tools.initIterate, creator.Individual, toolbox.expr)
# 'population' ã¯ãªãšãŒã¿ãŒïŒåäœã®ãªã¹ã
toolbox.register("population", tools.initRepeat, list, toolbox.individual)
# ç¹å®ã®ããŒã¿ã§è©äŸ¡é¢æ°ïŒé©å¿åºŠé¢æ°ïŒãç»é²ããŸã
toolbox.register("evaluate", evalSymbReg, points=training_data_points, labels=training_data_labels)
# éºäŒåæŒç®åã®ç»é²
toolbox.register("select", tools.selTournament, tournsize=3) # ãµã€ãº3ã®ããŒãã¡ã³ãéžæ
toolbox.register("mate", gp.cxOnePoint) # ããªãŒæ§é ã®ã¯ã³ãã€ã³ã亀差
# çªç¶å€ç°ïŒã©ã³ãã ãªãµãããªãŒãæ°ããçæãããã©ã³ãã ãªãµãããªãŒã«çœ®ãæããŸã
toolbox.register("mutate", gp.mutUniform, expr=toolbox.expr, pset=pSet)
ã¹ããã5ïŒçµ±èšãšãã°ã®èšå®
é²åã¢ã«ãŽãªãºã ã®é²è¡ãç£èŠããã«ã¯ãéå£ã«é¢ããçµ±èšæ
å ±ïŒäŸïŒæè¯é©å¿åºŠãå¹³åé©å¿åºŠãããã°ã©ã ãµã€ãºïŒãåéããããšãäžå¯æ¬ ã§ããDEAPã®Statisticsãªããžã§ã¯ããšHallOfFameã¯ãããå®è¡ããã®ã«åœ¹ç«ã¡ãŸãã
mstats = tools.Statistics(lambda ind: ind.fitness.values)
# åäžä»£ã®ããŸããŸãªçµ±èšæ
å ±ãèšç®ããŠä¿åããããã®é¢æ°ãç»é²ããŸã
mstats.register("avg", np.mean)
mstats.register("std", np.std)
mstats.register("min", np.min)
mstats.register("max", np.max)
HOF = tools.HallOfFame(1) # é²åäžã«èŠã€ãã£ãåäžã®æè¯åäœãä¿åããŸã
ã¹ããã6ïŒã¡ã€ã³é²åã«ãŒãã®å®è¡
ããã¯ãé²åã¢ã«ãŽãªãºã ãçãçããšããå Žæã§ããDEAPã¯ãæšæºçãªäžä»£é²åããã»ã¹ãã«ãã»ã«åããeaSimpleã®ãããªé«ã¬ãã«ã¢ã«ãŽãªãºã ãæäŸããŸããéå£ãããŒã«ããã¯ã¹ãéºäŒåæŒç®åã®ç¢ºçãäžä»£æ°ãçµ±èšãã³ãã©ãŒãæå®ããŸãã
NGEN = 50 # é²åãå®è¡ããäžä»£æ°
POP_SIZE = 300 # éå£ã®ãµã€ãºïŒåäœã®æ°ïŒ
CXPB = 0.9 # åäœã«äº€å·®ãé©çšãã確ç
MUTPB = 0.1 # åäœã«çªç¶å€ç°ãé©çšãã確ç
population = toolbox.population(n=POP_SIZE) # æåã®äžä»£ãåæåããŸã
# é²åã¢ã«ãŽãªãºã ãå®è¡ããŸã
# eaSimpleã¯åºæ¬çãªäžä»£é²åã¢ã«ãŽãªãºã ã«ãŒãã§ã
population, log = tools.algorithms.eaSimple(population, toolbox, CXPB, MUTPB, NGEN,
stats=mstats, halloffame=HOF, verbose=True)
# ãã¹ãŠã®äžä»£ãéããŠèŠã€ãã£ãæè¯ã®ããã°ã©ã ã¯HOF[0]ã«ä¿åãããŸã
best_program = HOF[0]
print(f"èŠã€ãã£ãæè¯ã®ããã°ã©ã : {best_program}")
ã¹ããã7ïŒçµæã®åæãšæè¯ããã°ã©ã ã®è§£é
é²åããã»ã¹ãå®äºããåŸããã°ãšHallOfFameã§èŠã€ãã£ãæè¯ã®åäœãåæããŸããé²åãããããã°ã©ã ããªãŒãèŠèŠåããå®è¡å¯èœã«ã³ã³ãã€ã«ããŠæªç¥ã®ããŒã¿ã§ã®ããã©ãŒãã³ã¹ããã¹ããããã®ããžãã¯ãè§£éããããšããããšãã§ããŸããèšå·ååž°ã®å Žåãããã¯çºèŠãããæ°åŠç衚çŸã調ã¹ãããšãæå³ããŸãã
# æè¯ããã°ã©ã ããã¬ãŒãã³ã°ããŒã¿ã§è©äŸ¡ããŠé©å¿åºŠã確èªããŸã
final_fitness = toolbox.evaluate(best_program)
print(f"æè¯ããã°ã©ã ã®æçµãã¬ãŒãã³ã°é©å¿åºŠ: {final_fitness}")
# ãªãã·ã§ã³ã§ãæ°ãããæªç¥ã®ããŒã¿ã§ã³ã³ãã€ã«ããŠãã¹ãããŠäžè¬åã確èªããŸã
# new_test_points = [(6, 12), (7, 14)]
# new_test_labels = [6**2 + 12, 7**2 + 14]
# test_fitness = evalSymbReg(best_program, new_test_points, new_test_labels)
# print(f"æè¯ããã°ã©ã ã®ãã¹ãé©å¿åºŠ: {test_fitness}")
# ããªãŒãèŠèŠåããã«ã¯ïŒgraphvizãã€ã³ã¹ããŒã«ããããã¹ããåŒã³åºãå¯èœã§ããå¿
èŠããããŸãïŒ
# from deap import gp
# import matplotlib.pyplot as plt
# nodes, edges, labels = gp.graph(best_program)
# import pygraphviz as pgv
# g = pgv.AGraph()
# g.add_nodes_from(nodes)
# g.add_edges_from(edges)
# g.layout(prog='dot')
# for i in nodes: g.get_node(i).attr['label'] = labels[i]
# g.draw('best_program.pdf')
PythonéºäŒçããã°ã©ãã³ã°ã®å®çšäŸïŒã°ããŒãã«äŸïŒ
GPãããã°ã©ã ãèªåçæããèœåã¯ãäžçäžã®ããŸããŸãªæ¥çãç ç©¶åéã§è²ŽéãªããŒã«ãšãªã£ãŠããŸããããã§ã¯ã説åŸåã®ããã°ããŒãã«ãªäŸãããã€ã玹ä»ããŸãã
1. èšå·ååž°ïŒããŒã¿ã«é ãããé¢ä¿æ§ã®è§£æ
説æïŒ å
¥åºåãã¢ã®ããŒã¿ã»ãããäžãããããšãGPã¯ãããã®éã®é¢ä¿ãæãããèšè¿°ããæ°åŠç衚çŸãé²åãããããšãã§ããŸããããã¯èªåç§åŠççºèŠã«äŒŒãŠãããç ç©¶è
ã¯ãã®åœ¢åŒã«ã€ããŠäºåã®ä»®å®ãªãã«ãæ ¹æ¬çãªæ³åãæããã«ããããšãã§ããŸãã
ã°ããŒãã«ã€ã³ãã¯ãïŒ
- æ°åç§åŠïŒ ããŸããŸãªå°ççå°åã§åéãããã»ã³ãµãŒããŒã¿ããæ°ããæ°åã¢ãã«ãçºèŠããã¢ããŸã³ç±åž¯éšæãã忥µã®æ°·åºãŸã§ãããŸããŸãªçæ ç³»ã®æ°è±¡ãã¿ãŒã³ãŸãã¯ç°å¢å€åã®åœ±é¿ãäºæž¬ããã®ã«åœ¹ç«ã¡ãŸãã
- çµæžãšéèïŒ æ ªäŸ¡ã®å€åãååäŸ¡æ ŒããŸãã¯ãã¯ãçµæžææšã®äºæž¬åŒãå°ãåºããããŸããŸãªã°ããŒãã«åžå Žã®ã¢ããªã¹ããæ¿çç«æ¡è ïŒäŸïŒæ°èåžå Žã®ã€ã³ãã¬äºæž¬ãäž»èŠé貚éã®çºæ¿ã¬ãŒãå€åïŒãæ¯æŽããŸãã
- ç©çåŠãšå·¥åŠïŒ å®éšããŒã¿ããç©çæ³åãŸãã¯å·¥åŠèšèšæ¹çšåŒãèªåçã«å°ãåºããææç§åŠãŸãã¯è€éãªã·ã¹ãã èšèšã®ç ç©¶ãå éããããšãŒãããããã¢ãžã¢ãŸã§èªç©ºå®å®å·¥åŠã§äœ¿çšãããŸãã
2. æ©æ¢°åŠç¿ïŒèªååãããã¢ãã«èšèšãšç¹åŸŽéãšã³ãžãã¢ãªã³ã°
説æïŒ GPã¯ãæ©æ¢°åŠç¿ãã€ãã©ã€ã³ã®ã³ã³ããŒãã³ããé²åãããããã«äœ¿çšã§ããå®å šã«äººéãèšèšããã¢ãã«ãããå ç¢ã§ãããã«ã¹ã¿ãã€ãºããããœãªã¥ãŒã·ã§ã³ã«ã€ãªãããŸãã
ã°ããŒãã«ã€ã³ãã¯ãïŒ
- èªåç¹åŸŽéãšã³ãžãã¢ãªã³ã°ïŒAutoFEïŒïŒ çããŒã¿ããæ°ãããéåžžã«äºæž¬æ§ã®é«ãç¹åŸŽéãé²åãããåŸæ¥ã®æ©æ¢°åŠç¿ã¢ãã«ã®ããã©ãŒãã³ã¹ãå€§å¹ ã«åäžãããããšãã§ããŸããäŸãã°ããã«ã¹ã±ã¢åéã§ã¯ãGPã¯ã¢ããªã«ãã¢ãžã¢ã®èšºçæããã®çã®æ£è ãã€ã¿ã«ãµã€ã³ãçµã¿åãããããšã§ãçŸæ£é²è¡ã®å åãšãªãç¹åŸŽéãäœæãã蚺æç²ŸåºŠãäžççã«åäžãããããšãã§ããŸãã
- ã¢ãã«éžæãšãã€ããŒãã©ã¡ãŒã¿æé©åïŒ GPã¯ãæé©ãªæ©æ¢°åŠç¿ã¢ãã«ã¢ãŒããã¯ãã£ïŒäŸïŒãã¥ãŒã©ã«ãããã¯ãŒã¯ããããžãŒïŒãŸãã¯ãã€ããŒãã©ã¡ãŒã¿èšå®ãæ€çŽ¢ã§ããã¢ãã«éçºã®ãã°ãã°æéã®ãããããã»ã¹ãèªååããŸããããã¯ãäžçäžã®çµç¹ã«ãšã£ãŠäžå¯æ¬ ã§ãããAIãœãªã¥ãŒã·ã§ã³ã®è¿ éãªå±éãå¯èœã«ããŸãã
- æ±ºå®æš/ã«ãŒã«ã®é²åïŒ å°éå®¶ãçè§£ã§ããéåžžã«è§£éå¯èœãªåé¡ãŸãã¯ååž°ã«ãŒã«ãçæããããŸããŸãªåœã®çµæžã«ãããä¿¡çšãªã¹ã¯è©äŸ¡ããäžçäžã®å ¬è¡è¡çã·ã¹ãã ã«ãããçŸæ£ã¢ãŠããã¬ãŒã¯äºæž¬ãªã©ã®åéã§ã®æææ±ºå®ãæ¯æŽããŸãã
3. ããããå·¥åŠãšå¶åŸ¡ã·ã¹ãã ïŒé©å¿åèªåŸãšãŒãžã§ã³ã
説æïŒ GPã¯ãç¹ã«æç€ºçãªããã°ã©ãã³ã°ãå°é£ãªåçãŸãã¯äžç¢ºå®ãªç°å¢ã«ãããŠããããããèªåŸãšãŒãžã§ã³ãã®å¶åŸ¡ããªã·ãŒãŸãã¯è¡åãé²åãããã®ã«åªããŠããŸãã
ã°ããŒãã«ã€ã³ãã¯ãïŒ
- èªåŸããã²ãŒã·ã§ã³ïŒ åç±³ã®éœåžç°å¢ãããªãŒã¹ãã©ãªã¢ã®å»å°ã®èŸ²å°ãŸã§ãããŸããŸãªå°åœ¢ãæäœããç¡äººèªç©ºæ©ïŒUAVïŒãŸãã¯å°äžããããã®å¶åŸ¡ããã°ã©ã ãé²åãããããããäºæãã¬äºæ ãæç€ºçã«ããã°ã©ãã³ã°ããããšãªãéçšããŸãã
- ç£æ¥ãªãŒãã¡ãŒã·ã§ã³ïŒ ãã€ãã®èªåè»å·¥å Žããéåœã®é»åæ©åšçµç«ã©ã€ã³ãŸã§ã補é ãã©ã³ãã§ã®å¹çãšç²ŸåºŠãé«ããããããã¢ãŒã ã®åäœãæé©åããçç£æ§ã®åäžãšå»æ£ç©ã®åæžã«ã€ãªãããŸãã
- ã¹ããŒãã€ã³ãã©ïŒ æ±äº¬ãã ã³ãã€ã®ãããªæŽ»æ°ã®ãã倧éœåžã®ããã«ããªã¢ã«ã¿ã€ã ã§äº€éã®æµããæé©åããæ··éãšæ±æãåæžããé©å¿å亀éå¶åŸ¡ã·ã¹ãã ãéçºããŸãã
4. ã²ãŒã AIãšã·ãã¥ã¬ãŒã·ã§ã³ïŒç¥çã§é©å¿åã®ãã察æŠçžæ
説æïŒ GPã¯ãã²ãŒã ã®ããã«è€éã§äººéã®ãããªAIãäœæããããã·ãã¥ã¬ãŒã·ã§ã³å ã®è¡åãæé©åãããããŠãããé åçãªäœéšãããæ£ç¢ºãªäºæž¬ã¢ãã«ã«ã€ãªããããšãã§ããŸãã
ã°ããŒãã«ã€ã³ãã¯ãïŒ
- ãã€ãããã¯ãªã²ãŒã ãã¬ã€ïŒ ãã¬ã€ã€ãŒã®æŠç¥ã«ãªã¢ã«ã¿ã€ã ã§é©å¿ããAI察æŠçžæãé²åãããäžçäžã®ãã¬ã€ã€ãŒïŒã«ãžã¥ã¢ã«ãªã¢ãã€ã«ã²ãŒã ããç«¶äºçãªeã¹ããŒããŸã§ïŒã«ãããææŠçã§ããŒãœãã©ã€ãºãããã²ãŒã äœéšãæäŸããŸãã
- æŠç¥ã·ãã¥ã¬ãŒã·ã§ã³ïŒ çµæžãŸãã¯è»äºã·ãã¥ã¬ãŒã·ã§ã³ã®ããã®æŽç·ŽããããšãŒãžã§ã³ããéçºããã¢ããªã¹ããããŸããŸãªæŠç¥ããã¹ãããå°æ¿åŠçãªã·ããªãªãåœééçºããã°ã©ã ã«ãããè³æºç®¡çã®å°æ¥ãäºæž¬ã§ããããã«ããŸãã
5. éèã¢ããªã³ã°ïŒååŒæŠç¥ãšãªã¹ã¯ç®¡çã®é²å
説æïŒ GPã¯ãéèåžå Žã§æ°ãããã¿ãŒã³ãçºèŠããäºæž¬ã¢ãã«ãæ§ç¯ã§ããŸããéèåžå Žã¯ãéåžžã«è€éã§éç·åœ¢ã§ããããšã§ç¥ãããŠããŸãã
ã°ããŒãã«ã€ã³ãã¯ãïŒ
- èªåååŒæŠç¥ïŒ ããŸããŸãªéèååïŒäŸïŒãã¥ãŒãšãŒã¯èšŒåžååŒæããã³ãã³èšŒåžååŒæãæ±äº¬èšŒåžååŒæïŒã®åçæ§ã®é«ããšã³ããªããã³ãšã°ãžãããã€ã³ããç¹å®ããã¢ã«ãŽãªãºã ãé²åãããããŸããŸãªåžå Žç¶æ³ãšèŠå¶ç°å¢ã«é©å¿ãããŸãã
- ãªã¹ã¯è©äŸ¡ïŒ ããŸããŸãªçµæžåã®å人ãŸãã¯äŒæ¥ã«å¯Ÿããä¿¡çšãªã¹ã¯ãè©äŸ¡ããã¢ãã«ãéçºããå°åããã³ã°ããŒãã«çµæžå€æ°ãå«ããéè¡ãéèæ©é¢ãåœéçãªããŒããã©ãªãªå šäœã§æ å ±ã«åºã¥ããæææ±ºå®ãè¡ããããã«æ¯æŽããŸãã
6. åµè¬ãšææç§åŠïŒæ§é ãšç¹æ§ã®æé©å
説æïŒ GPã¯ãåºç¯ãªèšèšç©ºéãæ¢çŽ¢ããŠãè¬å€ã®å¹æãé«ããååæ§é ãŸãã¯æãŸããç¹æ§ãæã€ææçµæç©ãæé©åã§ããŸãã
ã°ããŒãã«ã€ã³ãã¯ãïŒ
- å»è¬ååè£çæïŒ ç¹å®ã®æãŸããç¹æ§ïŒäŸïŒæšçã¿ã³ãã¯è³ªãžã®çµåèŠªåæ§ïŒãæã€ååŠååç©ãé²åããããã³ãããã¯ãé¡§ã¿ãããªãç æ°ãªã©ã®ã°ããŒãã«ãã«ã¹èª²é¡ã«å¯Ÿããåµè¬ããã»ã¹ãå éããŸãã
- æ°èŠææèšèšïŒ èªç©ºå®å®éšåããæç¶å¯èœãªãšãã«ã®ãŒæè¡ãŸã§ã®å¿çšã«ãããŠãïŒäŸïŒåŒ·åºŠãå°é»æ§ãèç±æ§ïŒãªã©ã®ç¹æ§ã匷åããæ°ããææçµæãŸãã¯æ§é ãçºèŠãã補é ããã³ã°ãªãŒã³ãšãã«ã®ãŒã«ãããã°ããŒãã«ã€ãããŒã·ã§ã³ã«è²¢ç®ããŸãã
éºäŒçããã°ã©ãã³ã°ã®ããã®äººæ°ã®ããPythonã©ã€ãã©ãª
Pythonã®GPã«ããã匷ã¿ã¯ãå€ãã®å®åã³ãŒããæœè±¡åããŠãããå°éã©ã€ãã©ãªã«ãã£ãŠå€§å¹ ã«åŒ·åãããŠãããéçºè ã¯åé¡ã®å ·äœæ§ã«éäžã§ããŸãã
1. DEAPïŒDistributed Evolutionary Algorithms in PythonïŒ
DEAPã¯ãPythonã§é²åèšç®ãè¡ãããã®æãåºã䜿çšãããŠããæè»ãªãã¬ãŒã ã¯ãŒã¯ã§ããéºäŒçããã°ã©ãã³ã°ãéºäŒçã¢ã«ãŽãªãºã ãé²åæŠç¥ãªã©ãããŸããŸãªã¿ã€ãã®é²åã¢ã«ãŽãªãºã ãå®è£ ããããã®å æ¬çãªããŒã«ãšããŒã¿æ§é ãæäŸããŸãã
- äž»ãªç¹åŸŽïŒ
- æè»ãªã¢ãŒããã¯ãã£ïŒ éåžžã«ã¢ãžã¥ãŒã«åãããŠããããŠãŒã¶ãŒã¯ããŸããŸãªéžææŒç®åãäº€å·®æ¹æ³ãçªç¶å€ç°æŠç¥ãçµäºåºæºãçµã¿åãããããšãã§ããŸãã
- ããªãŒããŒã¹GPãµããŒãïŒ
PrimitiveSetãšå°éã®éºäŒåæŒç®åã«ããããªãŒããŒã¹ã®ããã°ã©ã 衚çŸã«åªãããµããŒããæäŸããŸãã - 䞊ååïŒ èšç®éçŽçãªGPã¿ã¹ã¯ã«äžå¯æ¬ ãªã䞊åããã³åæ£è©äŸ¡ã®çµã¿èŸŒã¿ãµããŒãã
- çµ±èšãšãã®ã³ã°ïŒ éå£çµ±èšãšäžä»£ã«ãããæè¯åäœã远跡ããããã®ããŒã«ã
- ãã¥ãŒããªã¢ã«ãšããã¥ã¡ã³ãïŒ åºç¯ãªããã¥ã¡ã³ããšäŸã«ãããåŠç¿ãšå®è£ ã容æã«ãªããŸãã
- DEAPãéžæããçç±ïŒ é²åã¢ã«ãŽãªãºã ã现ããå¶åŸ¡ããé«åºŠãªGPæè¡ãæ¢çŽ¢ãããç ç©¶è ãéçºè ã«ãšã£ãŠãDEAPã¯ãã®æè»æ§ãšåŒ·åãããã奜ãŸããéžæè¢ã§ãã
2. PyGADïŒPython Genetic Algorithm for Deep Learning and Machine LearningïŒ
äž»ã«ïŒãã¥ãŒã©ã«ãããã¯ãŒã¯ã®éã¿ã®ãããªïŒãã©ã¡ãŒã¿ã®æé©åã®ããã®éºäŒçã¢ã«ãŽãªãºã ïŒGAïŒã«çŠç¹ãåœãŠãŠããŸãããPyGADã¯ãç¹ã«ãããã°ã©ã ããåºå®é·ã®æäœãŸãã¯ãã©ã¡ãŒã¿ã®ã·ãŒã±ã³ã¹ãšããŠè¡šçŸã§ããå ŽåãããåçŽãªGPã©ã€ã¯ãªã¿ã¹ã¯ã«é©å¿ã§ãã䜿ããããã©ã€ãã©ãªã§ãã
- äž»ãªç¹åŸŽïŒ
- 䜿ããããïŒ APIãã·ã³ãã«ã§ãåºæ¬çãªGAãè¿ éã«ã»ããã¢ããããŠå®è¡ã§ããŸãã
- ãã£ãŒãã©ãŒãã³ã°çµ±åïŒ KerasãPyTorchãªã©ã®ãã£ãŒãã©ãŒãã³ã°ãã¬ãŒã ã¯ãŒã¯ãšã®çµ±åã«éç¹ã眮ããã¢ãã«æé©åãè¡ããŸãã
- èŠèŠåïŒ äžä»£ããšã®é©å¿åºŠãããããããæ©èœãå«ãŸããŠããŸãã
- GPã®èæ ®äºé ïŒ äŒçµ±çãªããªãŒããŒã¹ã®æå³ã§ã®ãéºäŒçããã°ã©ãã³ã°ãã©ã€ãã©ãªã§ã¯ãããŸããããPyGADã¯ãåé¡é åããã®ãããªè¡šçŸãå¯èœã«ããå Žåãç·åœ¢éºäŒçããã°ã©ã ã«äŒŒãæäœãŸãã¯èšå®ã®ã·ãŒã±ã³ã¹ãé²åãããããã«äœ¿çšã§ããŸããæ§é ãããåºå®ãããŠããããã©ã¡ãŒã¿ãé²åããåé¡ã«ããé©ããŠããŸãã
3. GpLearnïŒScikit-learnã«ãããéºäŒçããã°ã©ãã³ã°ïŒ
GpLearnã¯ãScikit-learnäºæã®éºäŒçããã°ã©ãã³ã°ã©ã€ãã©ãªã§ãããã®äž»ãªçŠç¹ã¯èšå·ååž°ãšåé¡ã§ãããæ¢åã®Scikit-learnæ©æ¢°åŠç¿ãã€ãã©ã€ã³ã«ã·ãŒã ã¬ã¹ã«çµ±åã§ããŸãã
- äž»ãªç¹åŸŽïŒ
- Scikit-learn APIïŒ èŠªãã¿ããã
.fit()ããã³.predict()ã¡ãœããã«ãããMLå®è·µè ã«ãšã£ãŠå®¹æã«ãªããŸãã - èšå·ååž°ãšåé¡ïŒ ãããã®ã¿ã¹ã¯ã«ç¹åããŠãããèªåç¹åŸŽéãšã³ãžãã¢ãªã³ã°ãªã©ã®æ©èœãæäŸããŸãã
- çµã¿èŸŒã¿é¢æ°ïŒ åºæ¬çãªæ°åŠçããã³è«çæŒç®åã®è¯ãã»ãããæäŸããŸãã
- Scikit-learn APIïŒ èŠªãã¿ããã
- GpLearnãéžæããçç±ïŒ äž»ãªã¢ããªã±ãŒã·ã§ã³ãèšå·ååž°ãŸãã¯åé¡ã§ãããæ¢ã«Scikit-learnãšã³ã·ã¹ãã å ã§äœæ¥ããŠããå ŽåãGpLearnã¯å€§å¹ ãªå®åã³ãŒããªãã§GPãé©çšããããã®äŸ¿å©ã§å¹ççãªæ¹æ³ãæäŸããŸãã
PythonéºäŒçããã°ã©ãã³ã°ã«ãããé«åºŠãªãããã¯ãšèæ ®äºé
GPãããã«æ·±ãæãäžãããšãã¢ã«ãŽãªãºã ã®ããã©ãŒãã³ã¹ãšé©çšå¯èœæ§ã«å€§ããªåœ±é¿ãäžããå¯èœæ§ã®ããããã€ãã®é«åºŠãªãããã¯ãšèæ ®äºé ãçŸããŸãã
1. ããã°ã©ã ãããŒãã®ç®¡ç
GPã«ãããäžè¬çãªèª²é¡ã®1ã€ã¯ããããŒããã§ããããã¯ãé²åããããã°ã©ã ãé©å¿åºŠã®å¢å ãªãã«é床ã«å€§ããè€éã«ãªãåŸåã§ãã倧ããªããã°ã©ã ã¯è©äŸ¡ã«èšç®ã³ã¹ããããããè§£éãå°é£ãªå Žåãå€ãã§ãããããŒãã«å¯ŸæããæŠç¥ã«ã¯ä»¥äžãå«ãŸããŸãã
- ãµã€ãº/æ·±ãå¶éïŒ ããã°ã©ã ããªãŒã®æå€§æ·±ããŸãã¯ããŒãæ°ã«æç€ºçãªå¶éã課ããŸãã
- ç°¡æœæ§å§åïŒ é©å¿åºŠé¢æ°ãä¿®æ£ããŠãããåçŽãªãœãªã¥ãŒã·ã§ã³ã奚å±ããããã«ããã倧ããªããã°ã©ã ã«ããã«ãã£ã課ããŸãïŒäŸïŒ
fitness = accuracy - alpha * sizeïŒã - 代æ¿éžæã¡ã«ããºã ïŒ æé»çã«åçã«ãã£ããããããå°ããªåäœãåªå ããLexicaseéžæã幎霢-é©å¿åºŠParetoæé©åãªã©ã®éžææ¹æ³ã䜿çšããŸãã
- æŒç®åèšèšïŒ é床ã«å€§ããªããã°ã©ã ãçæããåŸåãå°ãªã亀差ããã³çªç¶å€ç°æŒç®åãèšèšããŸãã
2. ã¢ãžã¥ãŒã«åãšèªåå®çŸ©é¢æ°ïŒADFïŒ
åŸæ¥ã®GPã¯åäžã®ã¡ã€ã³ããã°ã©ã ãé²åãããŸããããããå®éã®ããã°ã©ã ã¯ã¢ãžã¥ãŒã«åãã€ãŸããµãã«ãŒãã³ãå®çŸ©ããŠåå©çšããèœåããæ©æµãåããããšããããããŸããèªåå®çŸ©é¢æ°ïŒADFïŒã¯ãGPãæ¡åŒµããŠãã¡ã€ã³ããã°ã©ã ãåŒã³åºãããšãã§ãããµãããã°ã©ã ïŒé¢æ°ïŒã ãã§ãªããã¡ã€ã³ããã°ã©ã èªäœãé²åãããŸããããã«ãããéå±€çãªåé¡è§£æ±ºãã³ãŒãã®åå©çšæ§ã®åäžãããã³äººéã®ããã°ã©ããŒãè€éãªã¿ã¹ã¯ãåè§£ããæ¹æ³ãåæ ãããããã³ã³ãã¯ãã§å¹ççãªãœãªã¥ãŒã·ã§ã³ãå¯èœã«ãªããŸãã
3. 䞊åããã³åæ£GP
GPã¯èšç®éçŽçã«ãªãå¯èœæ§ããããç¹ã«å€§èŠæš¡ãªéå£ãŸãã¯è€éãªé©å¿åºŠè©äŸ¡ã®å Žåã§ãã䞊ååãšåæ£ã³ã³ãã¥ãŒãã£ã³ã°ã¯ãå°é£ãªåé¡ã«å¯ŸåŠããããã«GPãã¹ã±ãŒãªã³ã°ããããã«äžå¯æ¬ ã§ããæŠç¥ã«ã¯ä»¥äžãå«ãŸããŸãã
- ç²ç²åºŠäžŠååïŒã¢ã€ã©ã³ãã¢ãã«ïŒïŒ è€æ°ã®ç¬ç«ããGPéå£ïŒãã¢ã€ã©ã³ããïŒã䞊åã§å®è¡ãããããã®éã§ã®åäœã®å®æçãªç§»è¡ãè¡ããŸããããã«ããã倿§æ§ãç¶æããããŸããŸãªéšåã®æ€çŽ¢ç©ºéãåæã«æ¢çŽ¢ã§ããŸãã
- 现ç²åºŠäžŠååïŒ åäœã®è©äŸ¡ãŸãã¯éºäŒåæŒç®åã®é©çšããè€æ°ã®ã³ã¢ãŸãã¯ãã·ã³ã«åæ£ããŸããDEAPã®ãããªã©ã€ãã©ãªã¯ããã«ãããã»ãã·ã³ã°ãŸãã¯Daskã䜿çšãã䞊åå®è¡ã®çµã¿èŸŒã¿ãµããŒããæäŸããŸãã
4. å€ç®çéºäŒçããã°ã©ãã³ã°
å€ãã®çŸå®äžçã®åé¡ã¯ããã°ãã°çžåããè€æ°ã®ç®çãåæã«æé©åããããšãå«ã¿ãŸããäŸãã°ãå·¥åŠèšèšã¿ã¹ã¯ã§ã¯ãã³ã¹ããæå°éã«æããªããããã©ãŒãã³ã¹ãæå€§åãããå ŽåããããŸããå€ç®çGPã¯ããã¬ãŒãæé©è§£ã®ã»ãããèŠã€ããããšãç®æããŸããããã¯ã1ã€ã®ç®çãæ¹åãããšå°ãªããšã1ã€ã®ä»ã®ç®çãæªåãããããªãœãªã¥ãŒã·ã§ã³ã§ããNSGA-IIïŒNon-dominated Sorting Genetic Algorithm IIïŒã®ãããªã¢ã«ãŽãªãºã ã¯ããã®ãããªã·ããªãªãåŠçããããã«GPã«é©åãããŠããŸãã
5. ææ³èªå°éºäŒçããã°ã©ãã³ã°ïŒGGGPïŒ
æšæºçãªGPã¯ãæ§æçãŸãã¯æå³çã«ç¡å¹ãªããã°ã©ã ãçæããå ŽåããããŸããææ³èªå°GPã¯ãæ£åŒãªææ³ïŒäŸïŒBNFïŒãé²åããã»ã¹ã«çµã¿èŸŒãããšã«ãã£ãŠããã察åŠããŸããããã«ãããçæããããã¹ãŠã®ããã°ã©ã ãå®çŸ©æžã¿ã®æ§é çãŸãã¯ãã¡ã€ã³åºæã®å¶çŽã«æºæ ããããšãä¿èšŒãããæ€çŽ¢ãããå¹ççã«ãªããé²åããããã°ã©ã ãããæå³ã®ãããã®ã«ãªããŸããããã¯ãç¹å®ã®ããã°ã©ãã³ã°èšèªã§ããã°ã©ã ãé²åãããå Žåããæå¹ãªSQLã¯ãšãªãååæ§é ãçæããå Žåãªã©ãå³å¯ãªã«ãŒã«ãæã€ãã¡ã€ã³ã®å Žåã«ç¹ã«åœ¹ç«ã¡ãŸãã
6. ä»ã®AIãã©ãã€ã ãšã®çµ±å
AIåééã®å¢çã¯ãŸããŸãææ§ã«ãªã£ãŠããŸããGPã¯ãä»ã®AIæè¡ãšå¹æçã«çµã¿åãããããšãã§ããŸãã
- ãã€ããªããã¢ãããŒãïŒ ãã¥ãŒã©ã«ãããã¯ãŒã¯ã«ããŒã¿ãäŸçµŠããåã«ç¹åŸŽéãšã³ãžãã¢ãªã³ã°ã«GPã䜿çšããããGPã䜿çšããŠãã£ãŒãã©ãŒãã³ã°ã¢ãã«ã®ã¢ãŒããã¯ãã£ãé²åãããŸãã
- ãã¥ãŒãé²åïŒ äººå·¥ãã¥ãŒã©ã«ãããã¯ãŒã¯ã®éã¿ãã¢ãŒããã¯ãã£ãåŠç¿ã«ãŒã«ãé²åãããããã«é²åã¢ã«ãŽãªãºã ã䜿çšãããµããã£ãŒã«ãã
PythonéºäŒçããã°ã©ãã³ã°ã®èª²é¡ãšéç
ãã®é©ç°çãªèœåã«ãããããããéºäŒçããã°ã©ãã³ã°ã«ã¯èª²é¡ããªãããã§ã¯ãããŸããã
- èšç®ã³ã¹ãïŒ GPã¯éåžžã«ãªãœãŒã¹ãæ¶è²»ããå¯èœæ§ããããç¹ã«å€§èŠæš¡ãªéå£ãå€ãã®äžä»£ããŸãã¯è€éãªé©å¿åºŠè©äŸ¡ã®å Žåãããªãã®èšç®èœåãšæéãå¿ èŠã§ãã
- é©å¿åºŠé¢æ°ã®èšèšïŒ é©åã§å¹æçãªé©å¿åºŠé¢æ°ãäœæããããšãããã°ãã°æãé£ããéšåã§ããäžé©åã«èšèšãããé©å¿åºŠé¢æ°ã¯ãåæãé ããæ©æåæããŸãã¯æé©ã§ã¯ãªããœãªã¥ãŒã·ã§ã³ã®é²åã«ã€ãªããå¯èœæ§ããããŸãã
- è§£éå¯èœæ§ïŒ GPã¯ïŒäžéæãªãã¥ãŒã©ã«ãããã¯ãŒã¯ãšã¯å¯Ÿç §çã«ïŒè§£éå¯èœãªããã°ã©ã ãçºèŠããããšãç®çãšããŠããŸãããé²åããããªãŒã¯éåžžã«è€éã«ãªãå¯èœæ§ããããç¹ã«ããããŒããã®å Žåã人éãçè§£ããããããã°ãããããã®ãå°é£ã«ãªãããšããããŸãã
- ãã©ã¡ãŒã¿ãã¥ãŒãã³ã°ïŒ ä»ã®é²åã¢ã«ãŽãªãºã ãšåæ§ã«ãGPã«ã¯ãæé©ãªããã©ãŒãã³ã¹ãåŸãããã«æ éãªãã¥ãŒãã³ã°ãå¿ èŠãªå€ãã®ãã€ããŒãã©ã¡ãŒã¿ïŒäŸïŒéå£ãµã€ãºã亀差確çãçªç¶å€ç°ç¢ºçãéžææ¹æ³ãããªããã£ãã»ããã³ã³ããŒãã³ããæ·±ãå¶éïŒããããå€ãã®å Žåãåºç¯ãªå®éšãå¿ èŠã§ãã
- äžè¬å察éåŠç¿ïŒ é²åããããã°ã©ã ã¯ããã¬ãŒãã³ã°ããŒã¿ã§ã¯äŸå€çã«ããŸãæ©èœãããããããŸããããæªç¥ã®ããŒã¿ã«ã¯æ±åããªãå¯èœæ§ããããŸããã¯ãã¹ããªããŒã·ã§ã³ãé©å¿åºŠé¢æ°ã§ã®æç€ºçãªæ£ååé ãªã©ã®æŠç¥ãäžå¯æ¬ ã§ãã
Pythonã«ããéºäŒçããã°ã©ãã³ã°ã®å°æ¥ãã¬ã³ã
éºäŒçããã°ã©ãã³ã°ã®åéã¯ãã³ã³ãã¥ãŒãã£ã³ã°èœåã®é²æ©ãšé©æ°çãªç ç©¶ã«ãã£ãŠãæ¥éã«é²åãç¶ããŠããŸããå°æ¥ã®ãã¬ã³ãã«ã¯ä»¥äžãå«ãŸããŸãã
- ãã£ãŒãã©ãŒãã³ã°çµ±åïŒ GPã䜿çšããŠæ°ãããã¥ãŒã©ã«ãããã¯ãŒã¯ã¢ãŒããã¯ãã£ãçºèŠãããããã€ããŒãã©ã¡ãŒã¿ãæé©åããããããŒã¿æ¡åŒµæŠç¥ãçæãããããŠããã£ãŒãã©ãŒãã³ã°ãã¬ãŒã ã¯ãŒã¯ãšã®é£æºã匷åããŸããããã«ãããããå ç¢ã§èªåŸçãªAIã·ã¹ãã ã®æ°ããäžä»£ã«ã€ãªããå¯èœæ§ããããŸãã
- èªåæ©æ¢°åŠç¿ïŒAutoMLïŒïŒ GPã¯AutoMLã«èªç¶ã«é©åããŸããããã¯ãç¹åŸŽéãšã³ãžãã¢ãªã³ã°ãã¢ãã«éžæããã€ããŒãã©ã¡ãŒã¿æé©åãªã©ãæ©æ¢°åŠç¿ãã€ãã©ã€ã³ã®ããŸããŸãªæ®µéãèªååã§ããAIãéå°éå®¶ã®ããåºãèŽè¡ã«ã¢ã¯ã»ã¹å¯èœã«ããŸãã
- 説æå¯èœãªAIïŒXAIïŒã®ããã®GPïŒ é²åããè€éãªããã°ã©ã ã人éãçè§£ããããã説æå¯èœã«ããããã®æ¹æ³ãéçºãããã«ã¹ã±ã¢ãéèãªã©ã®éèŠãªã¢ããªã±ãŒã·ã§ã³ã§ã®ä¿¡é Œãšæ¡çšãå¢ãããŸãã
- æ°ãã衚çŸïŒ GPã®ç¯å²ãšå¹çãæ¡å€§ããããã«ãåŸæ¥ã®ããªãŒæ§é ãè¶ ããã°ã©ãããŒã¹ã®ã·ã¹ãã ãææ³ããŒã¹ã®ã·ã¹ãã ããŸãã¯ãã¥ãŒã©ã«ããã°ã©ã 衚çŸã®ãããªä»£æ¿ããã°ã©ã 衚çŸãæ¢çŽ¢ããŸãã
- ã¹ã±ãŒã©ããªãã£ãšå¹çïŒ ãŸããŸãå€§èŠæš¡ã§è€éãªåé¡ã«å¯ŸåŠããããã®ã䞊åã忣ãããã³ã¯ã©ãŠãããŒã¹ã®GPå®è£ ã«ãããç¶ç¶çãªé²æ©ã
çµè«ïŒPythonã§é²åç¥èœãåãå ¥ãã
Pythonã®æ±çšæ§ã«ãã£ãŠåŒ·åãããéºäŒçããã°ã©ãã³ã°ã¯ãé²åååã®æ°žç¶çãªåã®èšŒã§ããåŸæ¥ã®ã¡ãœããã倱æããå Žæã§ãæ°ããäºæããªããœãªã¥ãŒã·ã§ã³ãçºèŠã§ããããŠããŒã¯ã§åŒ·åãªåé¡è§£æ±ºã¢ãããŒããæäŸããŸããç§åŠããŒã¿ãè§£æããããšãããã€ã³ããªãžã§ã³ããšãŒãžã§ã³ãã®èšèšãããŸããŸãªã°ããŒãã«ç£æ¥ã®è€éãªã·ã¹ãã ã®æé©åãŸã§ãPythonã«ããGPã¯ã人工ç¥èœã§å¯èœãªããšã®å¢çãæŒãåºããããšãå¯èœã«ããŸãã
ã³ã¢ã³ã³ã»ãããçè§£ããé©å¿åºŠé¢æ°ãšããªããã£ãã»ããã现å¿ã®æ³šæãæã£ãŠèšèšããDEAPã®ãããªå ç¢ãªã©ã€ãã©ãªã掻çšããããšã§ãé²åã¢ã«ãŽãªãºã ã®å¯èœæ§ã掻çšããŠãäžçã§æãå°é£ãªèšç®åé¡ã®ããã€ãã«åãçµãããšãã§ããŸããéºäŒçããã°ã©ãã³ã°ãžã®æ ã¯ãçºèŠã驿°ããããŠç¶ç¶çãªé©å¿ã®æ ã§ããããã§ã¯ãããªãã®ã³ãŒãã¯åã«åœä»€ãå®è¡ããã ãã§ãªããã€ã³ããªãžã§ã³ãã«ããããé²åãããŸããPythonã®åãšé²åã®ãšã¬ã¬ã³ã¹ãåãå ¥ãã仿¥ããæ¬¡äžä»£ã®ã€ã³ããªãžã§ã³ããœãªã¥ãŒã·ã§ã³ã®èšèšãå§ããŸãããã