¡@
ºÞ²z¼Æ¾Ç¡BPython»PR¡GÃ䪱µ{¦¡Ãä¾Ç¼Æ¾Ç¡A¤£¤p¤ßÅܦ¨¼Æ¾Ú¤ÀªR°ª¤â
§@¡@¡@ªÌ¢¬
¦ó©vªZ
¥Xª©ªÀ§O¢¬
¤­«n
¥Xª©¤é´Á¢¬
2023/06/01   (3ª© 1¨ê)
  

­YµLªk¬Ý¨£¹wÄý¤å¥ó½Ð«ö¦¹¤U¸ü

§Y¤é°_¤­«n©xºô¶È´£¨Ñ®ÑÄy¬d¸ß¡A¦p±ýÁʮѡA½Ð¦Ü¤­«n·s©xºô https://www.wunan.com.tw/
I  S  B  N ¢¬
978-626-366-128-8
®Ñ¡@¡@¸¹¢¬
1FWC
­¶¡@¡@¼Æ¢¬
416
¶}¡@¡@¼Æ¢¬
20K
©w¡@¡@»ù¢¬
550

¡°®ÑÄy±ÀÂˤH
¡¸¦n½Ò±ÀÂË¡¸
³¯¨|¤¯ °ê¥ß°ª¶¯¬ì§Þ¤j¾Ç·|­p¸ê°T¨t¡B¸ê°T°]°ÈºÓ¤h¾Ç¦ì¾Çµ{±Ð±Â¡þ°]ª÷¤j¼Æ¾Ú¤¤¤ß ¥D«ù¤H
¡°±ÀÂˤå
±ÀÂ˧Ç
     ºÞ²z¼Æ¾Ç¤w¬°°ÓºÞ»â°ì¤¤¼Æ¶q¤èªkªº­«­n°ò¦¡A¥»®Ñ¥D­n¤º®e¥]¬A¡u·L¿n¤À¡v»P¡u¯x°}¥N¼Æ¡v¡A¨Ã·f°t¹ê°È­±À³¥Î¡A¦p¡u¼Æ¾Ç³W¹º¡v¤Î¡uºÞ²z¨Mµ¦¡vµ¥¡C
     »P¼Æ¾Ç¤@¼ËÁ¿¨DÅÞ¿è«äºûªºµ{¦¡³]­p¡Aªñ¦~¨Ó¥Ñ©ó¤j¼Æ¾Ú»P¤H¤u´¼¼zªº¿³°_¡A±a°Ê¤F¤@ªÑ³nÅéÀ³¥Îµ{¦¡³]­pªº¾Ç²ß¼ö¼é¡A¦Ó¹L¥h´X¦~Python »y¨¥¦b codeeval.comªº³ÌÉqµ{¦¡»y¨¥¤¤¦W¦C²Ä¤@¡A²@µLºÃ°ÝPython¤w¦¨¬°·í¤µ³Ì¼öªùªºµ{¦¡»y¨¥¡CPythonµ{¦¡½X²³æ¦n²z¸Ñ¡B¦³¶WÂ×´Iªº¨ç¦¡®w¥i¥H¹B¥Î¡A¬O«D±`¾A¦X°ÓºÞ»â°ìªì¾ÇªÌ¾Ç²ßªºµ{¦¡»y¨¥¡C
     ±N·í¤µ³Ì¼öªù¤Î³Ì¾A¦X°ÓºÞ»â°ìªì¾ÇªÌ¾Ç²ßªºµ{¦¡»y¨¥Python»PºÞ²z¼Æ¾Ç¤º®eµ²¦X°_¨Ó¬O¥»®Ñªº³Ì¤j¯S¦â¡FŪªÌ¥i±N¼Æ¾Çªº¹BºâÅÞ¿è³z¹Lµ{¦¡»y¨¥¨Ó¹ê²{ºtºâ¡A¹Lµ{¤¤°£¤F¥i¥H¾Ç²ß¨ì¼Æ¶q¤èªk»Pµ{¦¡»yªk¤§¥~¡A¹ï©ó°ÓºÞ»â°ì¥¼¨Ó¹ê°ÈÀ³¥Î»Pµo®i¯à¤O¤W³þ©w¤F²`«pªº°ò¦¡A¨Ò¦p¡G²{¤µª÷¿Ä·~½´«kµo®iªºª÷¿Ä¬ì§Þ¡]FinTech¡^¡C
     ¥½¾Ç»P¦ó©vªZ±Ð±Â¬O¬ÛÃѦh¦~ªº¦n¤Í¡A¦P®É¤]¬O¦b¤j¼Æ¾Ú¡B¤H¤u´¼¼z©óª÷¿Ä¬ì§Þµo®i¤Wªº¦P¦n¥ë¦ñ¡A²`ª¾¦ó±Ð±Â¦b°]¸g»Pª÷¿Ä¤j¼Æ¾Úµ¥¬ã¨s»â°ìªí²{¨ô¶V¡A¨Ã¥B¤]¥Xª©¦h¥»»P°ÓºÞ¬ÛÃöªºµ{¦¡»y¨¥®ÑÄy¡A¹ï©ó°ÓºÞµ{¦¡±Ð¨|¤£¿ò¾l¤O¡C¦Ó¡uºÞ²z¼Æ¾Ç»PPython¡v¤@®ÑµÛ­«¥H¥ø·~ºÞ²z¬°¥Dªº²z½×¾Ç²ß¬[ºc¡A·f°tPythonµ{¦¡»y¨¥¹ê²{¹BºâÅÞ¿è¡A¤º®e²LÅã©öÀ´¡A«D±`¾A¦X°ÓºÞ¬ÛÃö¬ì¨tªº¾Ç¥Í¨Ó¾Ç²ß¡A¦b¦¹¾G­«±ÀÂ˵¹¤j®a¬ãŪ¡A¬Û«H¦¬Ã¬¤@©wº¡º¡¡C


³¯¨|¤¯
°ê¥ß°ª¶¯¬ì§Þ¤j¾Ç
·|­p¸ê°T¨t¡B¸ê°T°]°ÈºÓ¤h¾Ç¦ì¾Çµ{ ±Ð±Â
°]ª÷¤j¼Æ¾Ú¤¤¤ß ¥D«ù¤H
2019/05/24

¦ó©vªZ

¬ü°êµS¥L¤j¾Ç¡]University of Utah¡^¸gÀپdzդh¡A²{¬°°ê¥ß»OÆW®v½d¤j¾Ç¥þ²y¸gÀç»Pµ¦²¤¬ã¨s©Ò±Ð±Â¡A±Ð¾Ç¸ê¾úÂ×´I¡A´¿¥ô¥@·s¤j¾Ç¸gÀپǨt¤Î°]°Èª÷¿Ä¾Ç¨t±Ð±Â¡C±Mªø¬°°]°È¸gÀپǡBª÷¿Ä¤j¼Æ¾Ú¡B­p¶q¸gÀÙ¸ê®Æ¬ì¾Ç¤Îµ{¦¡»y¨¥µ¥¡AµÛ§@¦h¥»¬ÛÃö®ÑÄy¦p¡G¡m¤j¼Æ¾Ú¨Mµ¦¤ÀªRª¼ÂI¤j¬ð¯}10Á¿¡G§Ú¤ÀÃþ¬G§Ú¦b¡n¡B¡mR»y¨¥¡G²`¤J²L¥X°]¸g­p¶q¡n¡B¡mR¸ê®Æ±ÄÄq»P¼Æ¾Ú¤ÀªR¡G¥HGUI®M¥óRattleµ²¦Xµ{¦¡»y¨¥¹ê§@¡n¡B¡m¸ê®Æ¤ÀªR»´ÃP¾Ç¡GR Commander°ª¤â±¶®|¡n¡B¡m¤j¼Æ¾Ú®É¥Nªº¨Mµ¦«äºû¡G¸ê®Æ±Ô¨Æªº°_©ÓÂà¦X¡n¡B¡m¼Æ¦ì³Ð·s:°Ó·~¼Ò¦¡¸gÀپǡn¡C

±ÀÂ˧Ç
¦Aª©§Ç
ªìª©§Ç

ºÞ²z¼Æ¾Ç­ì²z
²Ä 1 °ó½Ò¡@¼Æ¾Ç°ò¦
²Ä 2 °ó½Ò¡@¨ç¼Æ
Codes Part 1

·L¤À
²Ä 3 °ó½Ò¡@·L¤À¤èªk¡G³æÅܼÆ
²Ä 4 °ó½Ò¡@·L¤À¤èªk¡G¦hÅܼƨç¼Æ¤§°¾·L¤À»P¥þ·L¤À
²Ä 5 °ó½Ò¡@·L¤ÀªºÀ³¥Î»PÃä»Ú·N¸q
Codes Part 2

¿n¤À
²Ä 6 °ó½Ò¡@¿n¤À­ì²z
²Ä 7 °ó½Ò¡@¿n¤À¤èªk¡G³æÅܼÆ
²Ä 8 °ó½Ò¡@¦hÅܼƭ«¿n¤À
²Ä 9 °ó½Ò¡@¿n¤ÀÀ³¥Î
Codes Part 3

¯x°}¥N¼Æ
²Ä 10 °ó½Ò¡@¯x°}¥N¼Æ°ò¦
²Ä 11 °ó½Ò¡@¯x°}ªº°ò¥»¹Bºâ»PÀ³¥Î
²Ä 12 °ó½Ò¡@¯x°}¶i¤@¨B©Ê½è»PÀ³¥Î
Codes Part 4

¼Æ¾Ç³W¹º»PºÞ²z¨Mµ¦
²Ä 13 °ó½Ò¡@³æÅܼƨç¼Æªº³Ì¨Î¤Æ°ÝÃD
²Ä 14 °ó½Ò¡@ ÂùÅܼƨç¼Æªº·¥­È¡GµL­­¨î±ø¥ó¤Uªº·¥­È§PÂ_°ÝÃD
²Ä 15 °ó½Ò¡@¨ã­­¨î±ø¥óªº³Ì¨Î¤Æ°ÝÃD
²Ä 16 °ó½Ò¡@¿ï¾Ü©Ê¥DÃD
Codes Part 5

Python¡@ªþ¿ý¤@
Python¡@ªþ¿ý¤G
Python¡@ªþ¿ý¤T

¹Ï¸Ñ«~µP¦æ¾P»P
ºÞ²z
¶W¹Ï¸Ñ¦æ¾PºÞ²z
¡G61°ó¥²­×ªº
¦æ¾P¾ÇºëµØ
¶W¹Ï¸Ñ±Ó±¶ºÞ²z
¶W¹Ï¸Ñ¦æ¾P­P³Ó
72­Ó¶Àª÷ªk«h
¹Ï¸ÑÅU«ÈÃö«YºÞ
²z(CRM)¡G
·|­û²`¯Ñ¸gÀç¾Ç
«Ø¼t¤uµ{±M®×ºÞ
²z



1FWC_PYTHON.RAR
1FWC_SOLUTION.ZIP
1FWC_STEP_BY_STEP_R.ZIP



¥DÃD3. ³Ì¨Î¤Æºtºâ¡]Optimization¡^ ¨D·¥­È
«e­±ªº¥DÃD¬O¸Ñº¡¨¬¤@¶¥¾É¨ç¼Æªº®Ú¡A¦]¦¹¡A§Ú­Ì¥²¶·¥ý·L¤À¨D¥X¾É¨ç¼Æ¡C¦ý¬O¡A³Ì²³æªº¤èªk¬Oª½±µ¹ï¥Ø¼Ð¨ç¼Æ¨D¸Ñ¡G¦P®É¸Ñ¥X¥Ø¼Ð·¥­È©MÁ{¬É­È¡C
Python§¹¦¨³o¥ó¨Æ¦³sympy©Mscipy¡Aµ§ªÌı±osympy»Ý­n«Å§iªº°Ñ¼Æ¤Ó¦h¡A¤×¨ä¬O¦b±a­­¨î¦¡®É¡C©Ò¥H§Ú­Ì¨Ï¥Î¼Ò²Õscipy¤ºªº¨ç¼Æoptimize()©Mminimize()¡APythonµ{¦¡½Xªº¨BÆJ¸Ñ»¡¦p¤U¡C

5.3-1 ³æÅܼÆ

§Ú­Ì¥ý¬Ý¥»³¹½d¨Ò1ªºÂ²³æ¤èµ{¦¡¡A¦p¤U¡G

²Ä1¨B¡G©w¸q¨ç¼Æ
from scipy import optimize
def f(x, sign=-1):
     return sign*(2*x**3+3*x**2-12*x-7)

¨â¦æ´NOK¡A¬Û·í²©ö¡C«Ý·|§Ú­Ì¦A¸ÑÄÀsignªº·N¸q¡C±µ¤U¨Ó°õ¦æ¨D·¥­È¡G

²Ä2¨B¡G¨D¸Ñ»Pµ²ªG
Result1 = optimize. minimize_scalar(f)
Result1.x
Result1.fun
f(Result1.x)

optimize. minimize_scalar()¬O¨D¸Ñ¨ç¼Æ¡CResult1¤º¦³³\¦hª«¥ó¡A¥D­n¦³¤T­Ó¡G
(1) Result1.x: ¸Ñ¥Xªºx­È¡C
(2) Result1.fun: ¸Ñ¥Xªº·¥¤p­È¡A¥i¥H©Mf(Result1.x)¹ï·Ó¬O§_¤@¼Ë¡C
(3) Result1.success: ¦^¶Ç¨D¸Ñ¬O§_¦¨¥\¡]True/False¡^¡C
§Ú­Ì¬Ý¬Ý¦C¦L¦b¿Ã¹õªºµ²ªG¡A¦p¤U¡G
Result1.x
Out[2]: 1.0

Result1.fun
Out[3]: -14.0

f(Result1.x)
Out[4]: -14.0

§Ú­Ì¦^¥h¬Ý½d¨Ò1ªº¹Ï§Î¡A¥i¯àªºÁ{¬É­È¦³¨â­Ó¡A±q¹Ï§Î¬Ýªº¥X¨Ó¡A§Ú­Ì¸Ñ¥Xªº¥u¬O·¥¤p­È¡]1, -14¡^¡C¨º¥t¤@·¥¤j­Èªº¸Ñ©O¡H®Ú¾Úscipy»¡©ú¤å¥ó¡A¶·§â¨ç¼Æ¨ú­t­È ¡A³o¤]¬O§Ú­Ì¬°¤°»ò¼g¨ç¼Æ®É¡A­n¼W¥[¤@­Ó°Ñ¼Æ sign¡A¦]¬°³o¼Ë¤ñ¸û¤è«K¡A§PÂ_·¥¤j­È®É¡A¥i¥H¦p¤U³o¼Ë³B²z¡G
²Ä1¨B¡G©w¸q¨ç¼Æ
def f(x, sign = -1):
     return sign*(2*x**3+3*x**2-12*x-7)

²Ä2¨B¡G¨D¸Ñ»Pµ²ªG
Result2 = optimize.minimize_scalar(f)

¿Ã¹õªºµ²ªG¦p¤U¡]»Ýª`·N·¥­È¶·¥[­t¸¹¡^
Result2.x
Out[5]: -1.999999999777818

-Result2.fun
Out[6]: 13.0

-f(Result2.x)
Out[7]: 13.0

½d¨Ò5 ¨ç¼Æf(x)=x4-x3¬Û¹ï·¥¤p­È
²Ä1¨B¡G©w¸q¨ç¼Æ
def f(x,sign=1):
     return sign*(x**4-x**3)

²Ä2¨B¡G¨D¸Ñ»Pµ²ªG
Result3 = optimize.minimize_scalar(f)

¿Ã¹õªºµ²ªG¦p¤U
Result3.x
Out[9]: 0.7500000000447832

Result3.fun
Out[10]: -0.10546875

f(Result3.x)
Out[11]: -0.10546875


5.3-2 ¦hÅܼÆ
¦A¨Ó´N¬O¤£±a­­¨î±ø¥óªº¦hÅܼƨç¼Æ¡A¥»½d³ò½d¨Òªº¨ç¼Æ ¬Û¹ï·¥¤p­È¡A«h¡G

²Ä1¨B¡G©w¸q¨ç¼Æ
import numpy as np
from scipy.optimize import minimize
def f(x, sign=1):
     x1 = x[0]
     x2 = x[1]
     return sign*(x1**3-4*x1*x2 +2*x2**2)
²Ä2¨B¡G¨D¸Ñ»Pµ²ªG
x0=[1,1]
Result4 = minimize(f, x0)

ÂùÅܼƥH¤Wªº¼Æ­È¨D¸Ñºtºâ¤ñ¸û½ÆÂø¡A§Ú­Ì¨Ï¥Îªº¨ç¼Æ¬Ominimize()¡A¦pªG¥Î¤W­±ªºoptimize.minimize_scalar()°õ¦æ·|¥¢±Ñ¡Cx0=[1,1]¬O°_©l­È¡]initial values¡^¡C

¿Ã¹õªºµ²ªG¦p¤U¡G
Result4.x
Out[13]: array¡][1.33333404, 1.3333353 ]¡^

Result4.fun
Out[14]: -1.185185185181036

f(Result4.x)
Out[15]: -1.185185185181036


¦]¬°¬O¼Æ­Èµ²ªG¡A®Ñ¤W¤â¸ÑªºÁ{¬É­È¬O4/3¡A¹q¸£«hºâ¥X1.3333¡C¬Û¹ï·¥¤p­È«h¬O -1.185¡C

¦¹ÃDÁÙ¦³¤@¸Ñ¡A¡]0,0¡^¬O¾bÂI¡A¦pªG³]©wx0=[0,0]¡A´N·|±a¥X0ªº·¥­È¡C¦]¬°¾bÂI§PÂ_ªºµ{¦¡°µªk»Ý­n½á¤©§ó¦hªº±ø¥ó¡A¤£¬O¥»®Ñ²[»\¡A¤]¤£¬O°Ó¾Ç°|·L¿n¤À¥DÃD¡A§Ú­Ì¤j­Pª¾¹D¥Ø«e¾Ç²ßªºª¬ªp§Y¥i¡C¦pªG·Q¬D¾ÔPython µ{¦¡¡A§â¥Ø«e©Ò¾Ç¹Lªº¤èªk¦ê°_¨Ó¡A¥i¥H´`¥H¤U¨BÆJ¡G
¨BÆJ 1. ¨Ï¥Îdiff()¨ç¼Æ¸Ñ¤@¶¥°¾·L¤À¡A¨D¨ú¥i¯àªºÁ{¬É­È
¨BÆJ 2. ¨D¤G¶¥°¾·L¤À
¨BÆJ 3. °Ñ¦Ò¥DÃD¤@ªº¤G¤¸¤@¦¸¤èµ{¦¡¨D¸Ñ§PÂ_ªº·Ç«h¡]Delta¡^¡A©w¸q²Ä¤T³¹ªºƒ´¨Ó§PÂ_½Ö¬O¾bÂI¡A½ÖµL¸Ñ¡C
³Ì«á. §â¥i¯àªºÁ{¬É­È³]¬°°_©l­È¡A¨D¸Ñ¡C

³o¼Ëªº¥|¨BÆJ¨ä¹ê¬O¤@­Óµ{¦¡°V½mªº¨å«¬°ò¦¡A¦³µ{¦¡¿³½ìªº¦P¾Ç¥i¥H¥Î¦b¥»½d³ò½d¨Ò·í§@½m²ß¡A¬°¤FÁקK·L¿n¤À¾Ç²ßªá¤Ó¦h®É¶¡Á¿³o­Ó¡A§Ú­Ì´N¨ì¦¹¬°¤î¡C

½m²ß
1. ¥ô¿ï¥»½d³ò½d¨ÒÃD¡A¥H®Ñ¥»¸Ñ¥XªºÁ{¬É­Èªþªñ¥ô¨ú¼Æ¦r·í§@°_©l­È¡A¼gµ{¦¡¨D¸Ñ·¥­È¡A¨Ã©M®Ñ¥»¤ñ¹ï¡C


5.3-3 ¦hÅܼƱa­­¨î¦¡

³Ì«á´N¬O±a­­¨î±ø¥óªº·¥­È¡A§Ú­Ì¥H²Ä15°ó½Ò½d¨Ò1¨Ó»¡©ú
Min.   
s.t.   
²Ä1¨B¡G©w¸q¥Ø¼Ð¨ç¼Æ
import numpy as np
from scipy.optimize import minimize
def f(x, sign=1):
     x1 = x[0]
     x2 = x[1]
     return sign*(x1+ 2*x2)

²Ä2¨B¡G©w¸q­­¨î±ø¥ó
def constraint1(x, sign=1):
     return sign*(x[0]*x[1]- 5000)

²Ä3¨B¡G³]©w¨D¸Ñ°Ñ¼Æ
x0=[10,10]      # °_©l­È¡A
b1 = (0, np.inf)   # °Ñ¼Æ±ø¥óxɬ¡A¤W¬Éµ¹¤©¥¿µL­­¤j¡Anp.inf´N¬O„V
b2 = (0, np.inf)   # °Ñ¼Æ±ø¥óyɬ¡A¤W¬Éµ¹¤©¥¿µL­­¤j¡Anp.inf´N¬O„V
bnds= (b1,b2)   # Ãä¬É±ø¥ó¦V¶q
con1 = {'type': 'ineq', 'fun': constraint1} #§â­­¨î¶°©w¸q¦¨¦r¨å
cons = [con1]   #§âcon1°µ¦¨¦ê¦C ¡]¸U¤@¦³¦h­Ó±ø¥ó®É¡A¥i¥H¥]¦b¤@°_¡^

²Ä4¨B¡G¨D¸Ñ»Pµ²ªG
Result5 = minimize(f, x0,bounds=bnds,constraints=cons)
¿Ã¹õªºµ²ªG¦p¤U

Result5.x
Out[17]: array([100.00691556,   49.99654246])

Result5.fun
Out[18]: 200.0000004780455

f(Result5.x)
Out[19]: 200.0000004780455


¥i¹ï·Ó¼Æ­Èªºµ²ªG©M²Ä15°ó½Ò¥N¼Æªºµ²ªG¡C

±µ¤U¨Ó§Ú­Ì¬Ý¡u¤TÅܼơA¨â±ø­­¨î¦¡¡v¡A¦p²Ä15°ó½Ò½d¨Ò3¡C³o­Ó½d¨Ò¨¬¥H°µ«Ü¦hªº±À¼s
Min.
¡@s.t.   
¡@         
²Ä1¨B¡G©w¸q¥Ø¼Ð¨ç¼Æ
import numpy as np
from scipy.optimize import minimize
def f(x, sign=1):
     x1 = x[0]
     x2 = x[1]
     x3 = x[2]
     return sign*(x1**2+ x2**2+x3**2)

²Ä2¨B¡G©w¸q­­¨î±ø¥ó
def constraint1(x, sign=1):
     return sign*(x[0]+x[1]-3)
def constraint2(x, sign=1):
     return sign*(x[0]+x[2]- 5)

²Ä3¨B¡G³]©w¨D¸Ñ°Ñ¼Æ¡]°Ñ¼Æ¨S¦³bounds¡A¬G¤£»Ý©w¸q¦p«e´£ªºb1,b2¡^
x0=[1,1,1]
con1 = {'type': 'ineq', 'fun': constraint1}
con2 = {'type': 'ineq', 'fun': constraint2}
cons = [con1, con2]

²Ä4¨B¡G¨D¸Ñ»Pµ²ªG
Result6 = minimize(f,x0,constraints=cons)

¿Ã¹õªºµ²ªG¦p¤U
Result6 = minimize(f,x0,constraints=cons)

Result6.x
Out[21]: array([2.6666667, 0.3333333, 2.3333333])

Result6.fun
Out[22]: 12.666666666666735

f(Result6.x)
Out[23]: 12.666666666666735

¥i¥H½T»{¼Æ­Èµ²ªG©M²Ä15°ó½Òªº¤À¦¡¡A¬O¤@¼Ëªº¡C³o¼Ë¥»½d³ò©Ò¦³ªº°ÝÃD¡A§Ú­Ì³£¥i¥H³B²z¤F¡C


½m²ß
1. ­×§ï¤W­±µ{¦¡¡A¨D¸Ñ¥»½d³ò½d¨Ò©M²ßÃD¡A©Mµª®×½T»{µ²ªG¡C