การหาค่าเหมาะที่สุดแบบเฟ้นสุ่ม

การหาค่าเหมาะที่สุดแบบเฟ้นสุ่ม (อังกฤษ:Stochastic Optimization) เป็นวิธีการหาค่าเหมาะที่สุดโดยการสร้างและใช้ตัวแปรสุ่ม
สำหรับปัญหาในกลุ่มนี้ จะใช้ตัวแปรสุ่มในขั้นตอนการคำนวณหาค่าเหมาะที่สุดสำหรับปัญหานั้นๆ

การแก้ปัญหาโดยวิธิการเฟ้นสุ่มนั้นได้ถูกใช้กันอย่างแพร่หลายในหลายวงการ อาทิเช่น ทางด้านอากาศยาน ทางการแพทย์ การขนส่ง และทางด้านการเงิน เป็นต้น เพื่อใช้ช่วยในการออกแบบจรวจมิสไซล์และอากาศยาน การคำนวณกำหนดประสิทธิภาพของยาตัวใหม่ ช่วยในการพัฒนาประสิทธิภาพของการควบคุมสัญญาณจราจร หรือแม้กระทั่งใช้เป็นเครื่องมือในการช่วยตัดสินใจเพื่อผลประโยชน์สูงสุดในการลงทุน โดยวิธีการแบบเฟ้นสุ่มนี้เป็นขั้นตอนวิธีที่จะช่วยให้สามารถตัดสินใจเลือกหนทางที่เหมาะที่สุดในการลดทอนปัญหาต่างๆในโลกความเป็นจริงลง

การหาค่าที่เหมาะสมที่สุดภายใต้ความไม่แน่นอน 
เพื่ออธิบายปัญหาบางอย่างที่เกี่ยวข้องในการหาค่าที่เหมาะสมที่สุดภายใต้ความไม่แน่นอน เราจะใช้การอธิบายผ่านการยกตัวอย่างปัญหา สมมติว่าเราต้องการหาค่าที่มากที่สุดของ G (x, ω) โดยที่ขอนิยามค่าต่างๆ ดังนี้
 x หมายถึงการตัดสินใจที่จะทำ
 X หมายถึงจำนวนชุดของการตัดสินใจที่เป็นไปได้ทั้งหมด
 ω หมายถึงผลลัพธ์ที่ไม่สามารถรู้ได้ระหว่างการตัดสินใจ และ
 Ω หมายถึงชุดของผลลัพธ์ที่เป็นไปได้ทั้งหมด
จากปัญหาดังกล่าว มีการหาค่าที่เหมาะสมที่สุดภายใต้ความไม่แน่นอนอยู่หลายวิธี ซึ่งบางส่วนจะแสดงในตัวอย่างต่อไป

ตัวอย่างปัญหา 
ตัวอย่างปัญหา Newsvendor หลายบริษัทขายสินค้าตามฤดูกาล เช่น บทความแฟชั่น ที่นั่งของสายการบิน ของประดับตกแต่งวันคริสต์มาส นิตยสารและหนังสือพิมพ์ ผลิตภัณฑ์เหล่านี้มีลักษณะการขายที่ค่อนข้างสั้น หลังจากหมดฤดูกาล มูลค่าของผลิตภัณฑ์ก็จะลดลงอย่างมากมาย บ่อยครั้งที่มีการตัดสินใจผลิต หรือซื้อผลิตภัณฑ์ ก่อนที่ฤดูกาลขายจะเริ่มต้น เพราะเมื่อฤดูกาลขายเริ่มต้นแล้ว จะไม่มีเวลามานั่งเปลี่ยนแปลงหรือดำเนินการการตัดสินใจนั้น เนื่องจากจะทำให้ปริมาณของผลิตภัณฑ์ที่จะได้รับไม่ตรงตามเป้าหมาย แต่ในระหว่างฤดูกาล ผู้ที่ตัดสินใจสามารถตัดสินใจแบบอื่นๆที่ทำให้เกิดผลดีมากขึ้นได้ เช่น ปรับเปลี่ยนราคาและยอดขายของผลิตภัณฑ์ที่มีช่วงฤดูกาลยาว พฤติกรรมดังกล่าว เป็นที่คุ้นเคยในหลายๆอุตสาหกรรม ซึ่งสถานการณ์ดังกล่าวก็คือการตัดสินใจทำก่อนสินค้าติดตลาด ดังนั้นการตัดสินใจต้องทำโดยไม่ทราบถึงผลที่จะเกิดขึ้น
สมมติว่า ผู้จัดการมีการตัดสินใจผลิตสินค้าตามฤดูกาล ตามการสั่งซื้อสินค้า ดังนั้นการตัดสินใจตัวแปร x คือตัวเลขค่าลบแทนปริมาณการสั่งซื้อ ค่าใช้จ่ายสำหรับผลิตภัณฑ์ของบริษัท c คือต้นทุนต่อหน่วยของผลิตภัณฑ์ ให้ R คือราคาต่อหน่วยของผลิตภัณฑ์ที่สามารถขายในฤดูกาล(รายได้) หลังจากฤดูกาลขาย ผลิตภัณฑ์ที่เหลือสามารถจำหน่ายในราคาค่าซาก คือ s และโดยปกติ s < R ให้ D คือความต้องการใช้ผลิตภัณฑ์ที่ตามการสั่งซื้อ ถ้าค่า D หรือค่าความต้องการสูงกว่าปริมาณการสั่งซื้อ x แล้ว ผลิตภัณฑ์จะถูกขายหมดและไม่มีหลงเหลืออยู่เมื่อหมดฤดูกาล เมื่อรวมรายได้แล้ว จะได้กำไรเท่ากับ และ  ตามลำดับ ถ้า D หรือค่าความต้องการน้อยกว่าปริมาณการสั่งซื้อ x แล้ว ปริมาณของผลิตภัณฑ์ที่มีเหลือเมื่อหมดฤดูกาลคือ x – D ดังนั้น เมื่อรวมรายได้แล้ว จะได้กำไรคือ
 และ  ตามลำดับ
ดังนั้นจะได้กำไร

ผู้จัดการต้องการตัดสินใจ x เพื่อเพิ่มกำไร G (x, D) แต่ไม่รู้ว่า D เป็นอย่างไร หรืออาจบอกได้ว่าไม่แน่นอนในตอนนี้
สังเกตว่า ถ้า r ≤ c และ s ≤ c แล้ว บริษัทจะไม่ได้กำไรจากการซื้อและขายผลิตภัณฑ์ กำหนดปริมาณการสั่งซื้อที่ดีที่สุดคือ x* = 0 โดยไม่คำนึงถึง D นอกจากนี้ถ้า s ≥ c แล้ว ผลิตภัณฑ์ที่ยังไม่ได้ขายเมื่อหมดฤดูกาล สามารถขายในราคาอย่างน้อยเท่ากับต้นทุนของผลิตภัณฑ์ เพื่อที่จะได้ปริมาณการสั่งซื้อที่เหมาะสมที่สุดโดยไม่คำนึงถึง D นี่เป็นตัวอย่างที่ถูกต้องและชัดเจน ดังนั้นเราจึงสมมติได้ว่าส่วนที่เหลือคือ s < c < r. ภายใต้สมมติฐานนี้ กำหนดให้ D ≥ 0 ฟังก์ชัน G(•,D) เป็นตัวแบบเชิงเส้นเป็นช่วง มีความชันเป็นบวก r - c สำหรับ x < D และความชันเป็นลบ s - c สำหรับ x > D ดังนั้นถ้าทราบความต้องการของ D จะได้การตัดสินใจที่ดีที่สุดในการเลือกปริมาณการสั่งซื้อ x * = D
อย่างไรก็ตาม ถ้าไม่รู้ D แล้ว จะทำให้ปัญหายากขึ้น บางครั้งผู้จัดการอาจต้องการป้องกันผลที่เลวร้ายที่สุด สมมติว่าผู้จัดการคิดว่า D จะอยู่ในช่วง [a, b] โดย a < b นั่นคือ ขอบเขตบนและล่างสำหรับความต้องการที่ผู้จัดการรู้ ในกรณีเพื่อป้องกันสถานการณ์ที่เลวร้ายที่สุด ผู้จัดการอาจกำหนดค่า x ที่ให้ผลกำไรที่ดีที่สุดภายใต้ผลที่เลวร้ายที่สุด นั่นคือค่ามากสุดของซึ่งนำไปสู่ปัญหา max – min ดังนี้

มันไม่ยากที่จะมองว่า g (x) = G (x, a) และด้วยเหตุนี้ x* = a เป็นค่าที่เหมาะสมที่สุดจากกรณีสถานการณ์ที่เลวร้ายที่สุด เป็นที่ชัดเจนว่า ในหลายกรณีจะมีการตัดสินใจที่ยึดติดแบบเดิมๆเกินไป
บางครั้งผู้จัดการอาจยังต้องการเสี่ยงตัดสินใจภายใต้ความเป็นไปได้ที่เลวร้ายที่สุด โดยคิดว่าจะให้ผลลัพธ์ที่ดี และเป็นการตัดสินใจที่ดีที่สุดที่สามารถเป็นไปได้ สำหรับทุกๆผลลัพธ์ของ D ใดๆ กำหนดให้  แสดงผลกำไรที่ดีที่สุด และถูกเรียกว่าค่าข้อมูลที่เหมาะสมที่สุดด้วย การตัดสินใจที่เหมาะสมกับข้อมูลที่สมบูรณ์แบบ x* = D บางครั้งถูกเรียกว่า รอและดูวิธีการแก้ปัญหา สมมติว่าผู้จัดการฝ่าย เลือกที่จะสั่งซื้อ x เพื่อให้กำไรเป็น G (x, D) จำนวนของกำไรที่บริษัทจะไม่ได้ เพราะตัดสินใจผิดพลาดคือ  ผู้จัดการอาจกำหนดค่าของ x ที่ช่วยลดส่วนของกำไรที่เสียไป สำหรับ x ใดๆ เนื่องจากผู้จัดการฝ่ายต้องการที่จะกำหนดค่าของ x ที่ช่วยลดส่วนของกำไรที่เสียไป จึงนำไปสู่ปัญหา min - max ต่อไปนี้

ค่าที่เหมาะสมที่สุดของปัญหานี้คือ  กำหนดให้ x* เป็นการรวมของ a และ b และทำให้ a < x* < b ค่าซากที่มากที่สุดที่สูญเสียไปต่อหน่วย c – s ค่าขอบเขตล่างของ x* คือ a และกำไรที่มากที่สุดต่อหน่วย r - c ค่าขอบเขตบนของ x* คือ b ดูเหมือนว่าการตัดสินใจที่เหมาะสมที่สุดจะเป็น x* = a
สิ่งที่แย่ที่สุดของตัวแปรทั้งสองคือ ไม่มีข้อมูลเบื้องต้นเกี่ยวกับความต้องการ D ยกเว้นขอบเขตบนและล่าง ในบางสถานการณ์ เหตุการณ์นี้อาจจะเป็นกรณีที่แย่ที่สุด ที่ต้องกำหนดขนาดความต้องการที่ไม่รู้ โดยต้องไม่ให้ มีขนาดใหญ่เกินไป
อีกวิธีหนึ่งในการตัดสินใจภายใต้ความไม่แน่นอน ซึ่งแตกต่างจากวิธีกรณีที่แย่ที่สุดที่ได้อธิบายไว้ข้างต้น เป็นวิธีการหาค่าที่เหมาะสมโดยการสุ่ม ซึ่งเราจะระบุในส่วนที่เหลือของบทความนี้ สมมติว่าความต้องการ D ถูกมองว่าเป็นตัวแปรสุ่ม นั่นหมายความว่าเราจะรู้การแจกแจงความน่าจะเป็นของ D หรืออย่างน้อยสามารถประมาณโดยใช้ข้อมูลเก่าๆ และ / หรือข้อมูลที่เคยปรากฏมาก่อนหน้านี้ F(w) ≡ ℙ(D ≤ w) จากผู้จัดการ ให้ เป็นฟังก์ชันการแจกแจงสะสม (CDF) ของ D จากนั้นสามารถหาค่าที่เหมาะสมจากฟังก์ชันค่าเฉลี่ย นั่นคือ ค่าคาดหวังของกำไรที่มากที่สุด  ซึ่งนำไปสู่โปรแกรมการสุ่ม

การแก้ปัญหาค่าที่เหมาะสมไม่ใช่เรื่องยากในปัจจุบัน กำหนดให้ D ≥ 0 ฟังก์ชัน G(•,D) มีลักษณะเว้า (ตัวแบบเชิงเส้นเป็นช่วง) ดังนั้นมูลค่าที่คาดหวัง g (.) ก็ต้องเว้าด้วย สมมติว่าในขณะที่ F (.) ต่อเนื่องที่จุด x > 0 นั่นคือ  เมื่อใช้การอินทิเกรดแยกส่วนจะคำนวณได้ว่า

ฟังก์ชัน g (.) ลักษณะกราฟเว้าอย่างต่อเนื่อง จากสมการ (5) ถ้า F (°) ต่อเนื่องที่ x จะเป็นไปได้ว่า g (.) เป็นอนุพันธ์ที่ x iff F (.) อย่างต่อเนื่องที่ x ซึ่งในกรณีนี้

ในทางกลับกัน เป็นฟังก์ชันการแจกแจงสะสม (CDF) ของ F ซึ่งถูกกำหนดว่า
เนื่องจากฟังก์ชัน g(.) มีลักษณะเว้า ซึ่งสอดคล้องกับ x* > 0 เป็นการหาค่าที่ดีที่สุดของสมการที่ (4) นั่นคือ g’ (x*) = 0 โดยมีเงื่อนไขว่า g(.) เป็นอนุพันธ์ที่ x* กำหนดให้ s < c < r จาก 0 < (r − c)/(r − s) < 1 ดังนั้นคำตอบที่ดีที่สุดของสมการ (4) จะได้ว่า

จากสมการ ถ้า F (°) เป็นฟังก์ชันต่อเนื่องที่ x *
เห็นได้ชัดว่าหากมีความรู้ด้านการกระจายความน่าจะเป็นของความต้องการ D แล้วจะได้รูปสมการที่ง่ายขึ้น ซึ่งคล้ายกับ CDF ของ F (°) จะไม่สามารถประมาณค่าที่ดีที่สุดได้ แต่จะเป็นการแก้ปัญหาที่ดีที่สุด
ค่าอื่นๆที่ได้จากการแก้ปัญหาสมการที่ (4) ผู้จัดการฝ่ายพยายามที่จะหากำไรที่ดีที่สุดจากค่าเฉลี่ย อย่างไรก็ตามเมื่อคิดถึงผลกำไร G (x *, D) อาจจะแตกต่างจาก g (x *) ขึ้นอยู่กับส่วนที่เราสนใจของความต้องการ D กรณีนี้อาจเกิดขึ้นถ้า G (x *, D) ถูกมองว่าเป็นตัวแปรสุ่ม จะมีความแปรปรวนขนาดใหญ่ซึ่งอาจจะวัดได้จาก Var [G (x *, D)] ดังนั้นหากผู้จัดการต้องการที่จะควบคุมความแปรปรวน เขาจะต้องพิจารณาปัญหาการเพิ่มประสิทธิภาพดังต่อไปนี้

ค่าสัมประสิทธิ์ β ≥ 0 หมายถึงค่าน้ำหนักที่ให้กับการตัดสินใจ ถ้า β มีขนาดใหญ่ ปัญหาดังกล่าวข้างต้นจะมีความแปรปรวนของกำไรน้อยที่สุด ในขณะที่ β = 0 นั่นคือสมการ (8) เกิดขึ้นพร้อมกับสมการ (4) เนื่องจากมีการกำหนดค่าความแปรปรวนเป็น Var [G (x, D)] ≡ IE [(g (x, D) - IE [G (x, D)]) 2] ซึ่งเท่ากับค่าคาดหวังของมัน ค่าที่ได้จาก (8) จะคล้ายกับ ค่าที่คาดหวังที่ได้จาก (4) ดังนั้นการหาค่าคาดหวังที่ดีที่สุดคือ G (x, D) ซึ่งใช้ได้กับ การหาค่าเฉลี่ย ค่าความแปรปรวน ตำแหน่งของข้อมูล และเกือบทุกๆด้านของตัวแปรสุ่มที่น่าสนใจ
จากตัวอย่างการหาค่าที่ดีที่สุดนี้ สามารถนำไปใช้ได้กับการตัดสินใจภายใต้สภาวะการที่ไม่แน่นอนได้ ตัวแปรสุ่ม D ใช้แทนความหมายของค่าเฉลี่ย μ = IE [D] แล้วทำการกำหนดปัญหาดังนี้

กำหนดการเฟ้นสุ่ม 
กำหนดการเฟ้นสุ่ม (อังกฤษ:Stochastic programming) คือการโปรแกรมทางคณิตศาสตร์อาจจะอยู่ในรูปของกำหนดการเชิงเส้น กำหนดการไม่เชิงเส้น กำหนดการจำนวนเต็ม กำหนดการเชิงผสมผสานเชิงจำนวนเต็ม โดยที่ข้อมูลนั้นเป็นแบบเฟ้นสุ่ม นั่นหมายถึงเราไม่ทราบค่าสัมประสิทธิ์ ที่แน่นอนของข้อมูลแต่จะทราบลักษณะการแจกแจงของข้อมูลแทนในขณะที่ข้อมูลที่เป็นแบบเชิงกำหนด เราจะทราบค่าของสัมประสิทธิ์ ดังนั้นกำหนดการเฟ้นสุ่มจึงเกี่ยวข้องกับสถานการณ์ที่มีความไม่แน่นอน

วิธีการค้นหาแบบสุ่ม 
ในทางกลับกันหากเรามีชุดของข้อมูลที่ประกอบด้วยค่าที่วัดมาอย่างแม่นยำแล้ว ก็จะมีวิธีการบางอย่างที่จะนำไปสู่ขั้นตอนการสุ่มที่น้อยลง แล
ในความเป็นจริงแล้วหลักการต่างๆของวิธีการสุ่มเป็นที่รู้กันว่าเป็นหนทางที่ง่ายและมีประสิทธิภาพในการนำมาซึ่งขั้นตอนวิธีที่เกือบจะมีประสิทธิภาพดีที่สุด และสำหรับปัญหามากมายหลากหลายประเภทวิธีการหาค่าเหมาะที่สุดแบบเฟ้นสุ่มนี้ ประกอบไปด้วย

 simulated annealing|Simulated annealing by S. Kirkpatrick, C. D. Gelatt and M. P. Vecchi (1983)
 Reactive search optimization (RSO) by Roberto Battiti, G. Tecchiolli (1994), recently reviewed in the reference book
 วิธีการครอส-เอนโทรปี: Cross-entropy method by Rubinstein and Kroese (2004)
 Random search by Anatoly Zhigljavsky (1991)
 Stochastic tunneling
 Parallel tempering a.k.a. replica exchange
 Stochastic hill climbing
 Swarm algorithms
 Evolutionary algorithms
 Genetic algorithms by Holland (1975)
 Evolution strategies

อ้างอิง 

 http://www2.isye.gatech.edu/~anton/stochoptiebook.pdf 
 http://www.jhuapl.edu/spsa/PDF-SPSA/Handbook04_StochasticOptimization.pdf
 http://www.ima.umn.edu/talks/workshops/9-9-13.2002/birge/birge.pdf
 http://www.math.uwaterloo.ca/~cswamy/talks/stochopt-short.ppt
 http://stoprog.org/index.html?spintroduction.html 

ทฤษฎีความน่าจะเป็น
ทฤษฎีการประมาณค่า
ขั้นตอนวิธี
การสุ่ม
ความน่าจะเป็น