Thesis

Basic Genetic Algorithm

Basic Genetic Algorithm

สำหรับองค์ประกอบหลักๆ ของ Genetic Algorithm มีดังนี้

1. Chromosome Encoding
2. Initial Population
3. Fitness Function
4. Genetic Operator -> Selection, Crossover, Mutation
5. Parameters

สามารถแจงรายระเอียดได้ดังนี้

- Chromosome Encoding
คือ ขั้นตอนสำหรับแปลงทางเลือกสำหรับการแก้ปัญหาที่เป็นไปได้ให้อยู่ในรูปแบบของ Chromosome
ในการแปลงวิธีการสำหรับแก้ปัญหาที่เป็นไปได้ ให้อยู่ในรูปแบบของ Chromosome นั้นสามารถที่จะทำได้ในหลายรูปแบบซึ่งแล้วแต่ความเหมาะสมของแต่ละปัญหา

- Initial Population
คือ การสุ่มเลือกเพื่อสร้างประชากรต้นแบบขึ้นมาเพื่อใช้เป็นจุดเริ่มต้นของขั้นตอนการวิวัฒนาการ
ขั้นตอนนี้จะเป็นขึ้นตอนแรกที่เกิดขึ้นก่อนที่จะเร่ิมเข้ากระบวนการของ Genetic Algorithm โดยประชากรกลุ่มแรก หรือประชาการต้นกำเนิด จะเกิดจากการสุ่มเลือกขึ้นมาจาก กลุ่มของประชากรทั้งหมดที่มีอยู่ โดยในการสุ่มเลือกจะทำการสุ่มตามจำนวนของประชากรที่ได้กำหนดไว้เป็น Parameter ของ Algorithm

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

- Genetic Operator
คือ การคำเนินการต่างๆ ตามขั้นตอนของ Genetic Algorithm เพื่อให้การเกิดวิวัฒนาการไปสู่คำตอบที่ดีขึ้น ซึ่งได้แก่ Selection, Crossover และ Mutation

- Parameter
คือ ปัจจัยที่ส่งผลต่อการทำงานของ Genetic Algorithm เช่น ขนาดของประชาการ, ความน่าจะเป็นของการ Crossover หรือ ความน่าจะเป็นของการ Mutation

1. Crossover Probability คือ ความน่าจะเป็นของการเกิด Crossover ซึ่งมีค่าอยู่ในช่วง 0 - 100 โดยทั่วไปค่าความเหมาะสมของความน่าจะเป็นในการเกิด Crossover จะอยู่ที่ 60% - 95% และในกรณีที่ไม่เกิดการ Crossover เกิดขึ้นจะเป็นการทำสำเนา (Copy) รูปแบบของพันธุกรรมจาก Parent ไปสู่ Offspring เลย ยกตัวอย่าง การทำ Crossover เช่น เรากำหนดให้ Crossover Probability มีค่าเป็น 85% ถ้าเราทำการสุ่มเลือกตัวเลขขึ้นมาเพื่อเปรียบเทียบกับค่า Crossover Probability ได้เท่ากับ 20 นั่นคืออยู่ในช่วงที่ <= 85 ในกรณีจะยอมให้เกิดการ Crossover เกิดขึ้น

2. Mutation Probability คือ ความน่าจะเป็นของการเกิด Mutation จะมีค่าอยู่ในช่วง 0 - 100 ส่วนใหญ่ค่าความน่าจะเป็นของการเกิด Mutation จะถูกกำหนดไว้ให้อยู่ในช่วง 0% - 1% ต่อตำเหน่งของ Chromosome ในกรณีที่ไม่มีการ Mutation นั่นหมายความว่ามีเพียงการ Crossover เกิดขึ้นเพียงอย่างเดียว แต่ถ้าหากว่า เกิดการ Mutation 100% จะทำให้ทุกตำเหน่งใน Chromosome มีการเปลี่ยนแปลงทั้งหมด ซึ่งสำหรับใน Genetic Algorithm นั้นอาจเกิดกรณีนี้ขึ้นได้ แต่ไม่บ่อยนัก ไม่เช่นนั้นการค้นหาจะเปลี่ยนจาก Genetic Algorithm การเป็น Random Search

3. Population Size หรือ จำนวนของประชากรในแต่ละรุ่น ถ้ามีจำนวนมากเกิดไปจะทำให้ต้องเสียเวลาในการประมวลผลมากและทำงานได้ช้าลง หรือ หากน้อยเกินไปก็จะทำให้การค้นหานั้นสามารถที่จะลู่เข้าสู่คำตอบที่เป็น Global Minimum ได้ช้าเกินไป

แผนผังลำดับของขั้นตอนการทำงาน






สำหรับเงื่อนไขในการหยุดการทำงาน หรือ Stop Condition นั้น สามารถกำหนดได้หลากหลายรูปแบบเช่น

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

ข้อมูลศึกษาเพ่ิมเติมจาก :
http://cs.felk.cvut.cz/~xobitko/ga/

Computer Clusters

Computer Cluster
คือ กลุ่มของคอมพิวเตอร์ที่เชื่อมต่อกันและสามารถทำงานร่วมกัน ซึ่งเราสามารถมองได้ว่าเครื่องคอมพิวเตอร์ทั้งหมด ทำงานเสมือนเป็นเครื่องคอมพิวเตอร์เครื่องเดียวกัน ซึ่งเครื่องคอมพิวเตอร์ต่างๆ จะถูกเชื่อมต่อกันโดยระบบ Local Area Network (LAN) Computer Cluster ถูกพัฒนาขึ้นเพื่อใช้ในการเพ่ิมประสิทธิภาพของการทำงานให้สูงขึ้นมากกว่าการทำงานในระดับ Single Computer

ประเภทของ Cluster.

High-availability (HA) clusters

ถูกพัฒนาขึ้นมาเพื่อความคงทนของระบบ ซึ่งทำให้ระบบสามารถทำงานต่างๆ ได้ตลอดเวลาอย่างต่อเนื่อง โดยระบบจะประกอบไปด้วย node ต่างๆ ที่มีลักษณะเหมือนกัน (redundancy nodes) ซึ่งสามารถที่จะทำงานแทนกันได้ หากมี node ใด node หนึ่งไม่สามารถทำงานได้ โดยระบบจะมีการตรวจสอบองค์ประกอบภายในระบบ หากพบว่ามีองค์ประกอบใดไม่สามารถที่จะทำงานได้ ระบบจะนำงานที่ถูกกระทำค้างอยู่โดยองค์ประกอบที่ไม่สามารถทำงานได้นั้นไปให้องค์ประกอบอื่นทำต่อแทน

ตัวอยางของงานที่จำเป็นจะต้องใช้ HA Cluster เช่น databases, file sharing บนระบบ network, business applications, customer services เช่น electronic commerce websites.

Load-balancing clusters

ถูกพัฒนาขึ้นมาเพื่อให้ระบบสามารถรองรับปริมาณงานที่มีจำนวนมากๆ ได้ ซึ่งทำงานโดย front ends node เป็นตัวรับงานต่างๆ เข้ามาและมี commercial load balancers เป็นตัวกระจายงานออกไปให้ node ต่างๆ ที่อยู่ในระบบ Cluster ทำงานที่รับเข้ามา

High-performance computing (HPC) clusters

ทำงานโดยอาศัยการประมวลผลแบบขนาน (Parallel Computing) โดยทำการแบ่งงานที่รับเข้ามาออกเป็นส่วนย่อยๆ แล้วกระจายส่วนย่อยๆ เหล่านั้นออกไปประมวลผลตาม node ต่างๆ ซึ่งวิธีนี้จะทำให้สามารถทำงานที่ใช้เวลาในการประมวลผลนานๆ สามารถทำงานเสร็จได้อย่างรวดเร็วยิ่งขึ้น

ref : 
http://en.wikipedia.org/wiki/Computer_cluster#Cluster_categorizations
http://en.wikipedia.org/wiki/High-availability_cluster
http://en.wikipedia.org/wiki/High-performance_computing

บันทึกการติดตั้ง Pypar

เฮ้อ... เอาหล่ะหลังจากติดตั้ง Module Numpy เรียบร้อยแล้ว และก่อนที่จะเขียนถึงวิธีการติดตั้ง Mudule Pypar นั้นขอบันทึกความยากลำบากสำหรับการติดตั้งเจ้า Module ของ Python ที่ใช้สำหรับเขียนโปรแกรมแบบ Parallel นี้ไว้ซักหน่อยก็แล้วกัน

เร่ิมต้นจากความไม่รู้ ส่ิงเดี่ยวที่รู้ในตอนนี้ก็คือ ว่าเราใช้ Python เขียนโปรแกรม เอ... แล้วถ้าต้องการเขียนโปรแกรมให้มันสามารถ run แบบ Parallel หล่ะ เจ้า Python นั้นมันจะทำได้ไม้หว่า

ดูไป ดูมา อ่านไป อ่านมา สรุปว่าอ้อ โดยความสามารถพื้นฐานนั้นมันทำไม่ได้ แต่มันพอมีทางทำได้อยู่ โดยการติดตั้ง Module เพิ่มเข้าไป ซึ่ง Module เหล่านี้มันก็จะมีพวก API ต่างๆ ที่ใช้สำหรับช่วยให้สามารถสั่งงาน หรือเขียนโปรแกรมแบบ Parallel ได้โดยจะทำงานร่วมกับโปรแกรม MPI (Message Passing Interface)

เออ แล้วมันมี Module อะไรบ้างหว่าที่ช่วยให้สามารถทำงานอย่างที่ว่าได้

ลองเข้าไปอ่านในนี้ดู : http://wiki.python.org/moin/ParallelProcessing

โอ้ ... ทำไมมันมีหลายตัวจะเลยหง่ะ

แล้วจะใช้ตัวไหนดีหล่ะ อย่างนี้ คงต้องลองผิดลองถูก กันดูซักตั้ง เริ่มสุ่มเลือกมาทีละตัวเลย
ผลก็คือ บางตัวก็ Compile ไม่ผ่าน ลองแล้ว ลองอีก ทำทุกทางแล้ว ก็ยัง Compile ไม่ผ่านซักที ลองอ่านในคู่มือของมันดู เอ.. ทำมันเขียนเหมือนหลับตาลงยังลงได้เลย แล้วทำไมเราลงไม่ได้ซักทีวะ ลองไม่รู้กี่รอบแล้ว ทำมันก็ทุกทางแล้ว สุดท้ายก็ไม่ได้

เอาใหม่ ไอ้ตัวนี้ไม่ได้ก็เปลี่ยนตัวใหม่ มั่วมันไปเรื่อยๆ หลายตัวผ่านไปก็ยังไม่ได้ซักที ลงอีกหรอบเดียวกันหมดคือ Compile ไม่ผ่านซักที

และแล้วก็มาหยุดที่เข้าตัวนี้ ScientificPython ติดตั้งได้ซะที แต่มันก็ซับซ้อนอยู่ซักหน่อย ต้องอ่าน Manaul หรือ Readme ที่มันไว้มาด้วยดี ต้องอ่านให้ระเอียด ถึงจะเข้าใจว่ามันต้องติดตั้งยัง แล้วก็ต้องแก้ปัญหาอีกพอสมควรเนื่องจากใน Mac OS X ในระหว่าง Compile มันจะอ่าน Path ผิดไปต้องทำการแก้ Paht ให้ถูกต้อง แต่ถ้าเป็นใน Linux จะไม่มีปัญหาอะไร

หลังจากติดตั้ง ScientificPython เรียบร้อยแล้ว ดีใจอยู่หลายวัน ตั้งหน้าตั้งตา รีบหา manual ของมันมาอ่าน ๆ และก็อ่าน อยู่หลายวันเลยกว่าจะรู้เรื่อง แต่พอทำงานจริงกลับเจอปัญหาหลายอย่างเลย รู้สึกว่ามันจะทำงานได้ไม่ค่อยสมบรูณ์นัก และรู้สึกว่ามันจะขาด API บางอย่างที่จำเป็นไปด้วย (สรุปปัญหาของมันก็คือ มันมี API สำหรับงานทางด้าน Scientific มากมาย แต่สำหรับ API ทางด้านเกี่ยวกับ MPI มันกลับมีไม่ครบ)

รู้สึกถอดใจอยู่พักใหญ่เลย แต่ยังไงก็ต้องทำงานต่อ คงต้องเร่ิมกันใหม่ มั่วกันต่อ

คราวนี้ลอง Download เจ้า Pypar มาลองดู ตอนแรกไม่ค่อยประทับใจเท่าไหร่นัก เนื่องจากเข้าไปที่หน้าเว็บ ปรากฏว่ามี Information ที่ให้ไว้น้อยมาก ไม่มี Manaul ไม่มี Document มีแต่ตัวอย่างง่ายๆ แปะไว้ให้ดูที่หน้าเว็ปอยู่ตัวอย่างเดียว

แต่มาถึงขนาดนี้ไม่ลองก็ไม่ได้ ก็เลยกลั้นใน Download มันมาทดลองติดตั้งดูหน่อย
ผลปรากฏว่า ติดตั้งง่ายกว่าที่คิดเยอะเลย ติดตั้งได้เลย โดยที่ไม่ต้องเสียเวลามานั่งอ่าน Readme ด้วยซ้ำ

คราวนี้มาถึงการทำลองทำงานจริง โดยการทดลองเขียนโปรแกรมแบบ Parallel ปรากฏว่าเจ้า Pypar มันไม่มี Manual หรือว่า Document ให้มาเลยลองมีแต่ Source Code ของโปรแกรมตัวอย่างติดมาให้อยู่ 6 - 7 ตัวอย่างเท่านั้น

ดังนั้นการศึกษาให้รู้เรื่องคงมีทางเดียวคือ นั่งไล่ Source Code ของตัวอย่างที่ให้มาเท่านั้น

โอเค สรุปเลยก็แล้วกันว่าตกลงใช้ Pypar นี่แหล่ะ ติดตั้งง่าย ใช้งานดี

เอาหล่ะบนมาพอแล้วคงต้องบันทึกวิธีการติดตั้งเอาไว้บ้างแล้ว
เร่ิมจาการไป Download Souce Code ของ Pypar ได้ที่

Download : http://datamining.anu.edu.au/~ole/pypar/pypar_1_9_2.tgz

จากนั้นก็ทำการแตกไฟล์ที่ Download มาและเข้าไปยัง Directory ที่ได้จากการแตกไฟล์
และทำการติดตั้งด้วยคำสั่งต่อไปนี้

# python setup.py build
# python setup.py install

บันทึกการติดตั้ง LAM/MPI

ตั้งใจว่าจะเขียนมานานแล้วแต่ก็ยังกลั่นกรองออกมาไม่ได้ซะที

ตอนนี้รู้สึกว่าได้พักซะทีเพราะว่า หลายๆ เรื่องที่พยาศึกษา หรือว่าพยายามทำมามันเริ่มลงตัว และเข้าที่เข้าทางไปบ้างแล้ว

ดังนั้นน่าจะค่อยๆ ย่อย เอาความรู้ที่เคยศึกษาเอาไว้ก่อนหน้านี้ออกมาชะรอบนึงเผื่อเอาไว้กันลืม

เริ่มต้นจากจุดใหญ่ก่อนก็แล้วกันสำหรับเจ้าตัว LAM/MPI เพราะว่าเจ้าตัวนี้ถือว่าเป็นจุดเริ่มต้นของทุกอย่างใจงานที่เราทำอยู่เลยก็ว่าได้ ถ้าต้อง set เครื่องใหม่ยังไงก็ต้องลงเจ้าตัวนี้เป็นตัวแรก

สำหรับการติดตั้งเจ้าตัว LAM/MPI นี้นั้น ตอน Complie โปรแกรม นั้นต้องใช้ตัว Frotan compiler ด้วย ซึ่งโดยปรกติ Mac OS X 10.4.8 ไม่ได้ติดเจ้าตัว Frotan compiler มาให้ด้วย ต้องมาติดตั้งเพิ่มเอาเอง โดยสามารถ Download ได้จาก

Download : g77-bin.tar.gz (Intel Mac only)

ตัว Compiler ที่ Download มานั้นเป็นไฟล์ Binary อยู่แล้วสามารถติดตั้งได้เลยโดยไม่ต้อง Compile ไฟล์ใหม่
ซึ่งสามารถติดตั้งได้ดังนี้

# sudo tar -zxvf g77-bin.tar.gz -C /

ตอนนี้ติดตั้งเรียบร้อยแล้ว แต่ว่าระบบมันจะยังไม่สามารถเรียกเข้าตัว Compiler นี้ได้เลย เราต้องทำการ Add paht ของเข้าตัว Frotan compiler เข้าไปใน Search path ของระบบเสียก่อน โดยการ

ทำการเปิดไฟล์ .bash_profile ขึ้นมาแก้ไขโดย

# pico ~/.bash_profile

จากนั้นเพิ่มข้อความนี้เข้าไปในไฟล์ 

# Setting g77
PATH="/usr/local/bin:${PATH}"
export PATH

หลังจากนั้นก็ Save file แล้วทำการ ปิด และ เปิด terminal ใหม่เพื่อให้ระบบทำการ update path ที่เราเพ่ิมเข้าไป
ทำการทดสอบความถูกต้องโดยใช้คำสั่ง

# which g77

ถ้าระบบสามารถค้นหาเจ้า g77 เจอตาม path ที่ระบุเอาไว้ก็แสดงว่าถูกต้อง ใช้ได้



จากนั้นก็เร่ิมทำการติดตั้งโปรแกรม LAM/MPI ได้เลย โดยสามารถ Download Source Code ได้จาก

Download : http://www.lam-mpi.org/7.1/download.php

ทำการแตกไฟล์ และ Compile source code โดยติดตั้งโปรแกรมเอาไว้ที่ /usr/local/lam
ขั้นตอนการ Compile ทำได้ดังนี้

#  ./configure --prefix=/usr/local/lam
# make
# sudo make install

สำหรับขั้นตอนการติดตั้งโดยการ Compile Source Code ของโปรแกรม LAM/MPI ถือว่าใช้เวลานานมากๆ กว่าจะติดตั้งจนเสร็จ

และหลังจากนั้นก็ต้องทำการ Add Path ของโปรแกรมเข้าไปไว้ใน Search Path ของระบบด้วยโดยการเปิดไฟล์ .bash_profile ขึ้นมาแล้วทำการเพิ่ม Path เข้าไป ดังนี้

ทำการเปิดไฟล์ .bash_profile ขึ้นมาแก้ไขโดย

# pico ~/.bash_profile

จากนั้นเพิ่มข้อความนี้เข้าไปในไฟล์ 

# Setting Lam MPI
PATH="/usr/local/lam/bin:${PATH}"
export PATH

# Setting Lam Library path
LD_LIBRARY_PATH="/usr/local/lam/lib:${LD_LIBRARY_PATH}"
export LD_LIBRARY_PATH

หลังจากนั้นก็ Save file แล้วทำการ ปิด และ เปิด terminal ใหม่เพื่อให้ระบบทำการ update path ที่เราเพ่ิมเข้าไป
ทำการทดสอบความถูกต้องโดยใช้คำสั่ง

# which mpicc
# which lamboot
# which lamhalt
# which mpirun
# which mpiexec

ถ้าระบบสามารถค้นหาเจ้าคำสั่งต่างๆ เหล่านี้เจอตาม path ที่ระบุเอาไว้ก็แสดงว่าถูกต้อง ใช้ได้


หมายเหตุ :

ศึกษาเพิ่มเติมจาก : 
http://hpc.sourceforge.net
http://www.lam-mpi.org
http://en.wikipedia.org/wiki/Message_Passing_Interface

สัญกรณ์โอใหญ่

ปรกติแล้วไม่ค่อยจะได้เข้าไปอ่านอะไรจาก http://th.wikipedia.org เท่าไหร่ เพราะเคยเข้าไปอ่านแล้วปรากฏว่ามันทำให้รู้สึกว่ายิ่งอ่านยิ่งทำให้งง กว่าเดิม แล้วก็รู้สึกเหนี่อยกว่าเดิมด้วย (ว่าการที่เราจะหาคำตอบกับบางสิ่งที่เราไม่รู้ แล้วมันยิ่งทำให้เราไม่รู้มากไปกว่าเดิม)

เหนี่อยกับการที่ต้องแปลไทยเป็นไทยนี่แหล่ะมั้ง

แต่บางทีคงต้องยอมรับและออกตัวไว้ก่อนเลยว่า ไม่มีความรู้อะไรเกี่ยวกับสังคมของ thai wiki ซักเท่าไหร่ ไม่ค่อยรู้ว่าตอนที่เค้าทำการโพสด์นั้นมันมีกติกาอะไรกำหนดไว้หรือป่าว หรือว่ามันมีการรณรงค์อะไรกันอยู่รึป่าว (ใครรู้ก็บอกทีนะ จะไม่เลิกเข้าใจไปเอง)

และก็ไม่ได้มีเจตนาที่ว่า มือไม่พาย แล้วเอาเท้าลานำ้ หรือไม่มีส่วนร่วมแล้วยังบ่น หรือ ไม่ทำแล้วยังว่า

ต้องบอกว่าไม่ได้มีเจตนาอย่างที่ว่าจริงๆ

มันแต่หงุดหงิดนิดหน่อยเท่านั้นเอง

ลองเทียบกันดูระหว่างเนือหาเดียวกันนี้นะ

Big O notation or Big Oh notation, and also Landau notation or asymptotic notation,
is a mathematical notation used to describe the asymptotic behavior of functions.
Its purpose is to characterize a function's behavior for very large (or very small)
inputs in a simple but rigorous way that enables comparison to other functions.

ในวิชาทฤษฎีความซับซ้อน วิทยาการคอมพิวเตอร์ และคณิตศาสตร์ สัญกรณ์โอใหญ่ (Big O notation) 
เป็นสัญกรณ์คณิตศาสตร์ที่ใช้บรรยายพฤติกรรมเชิงเส้นกำกับของฟังก์ชัน หากกล่าวให้แจ้งชัด สัญกรณ์โอใหญ่นั้นใช้เพื่อ
บรรยายขอบเขตบนเชิงเส้นกำกับ โดยระบุเป็นขนาด (magnitude) ของฟังก์ชันในพจน์ของฟังก์ชันอื่นที่โดยทั่วไป
ซับซ้อนน้อยกว่า
สัญกรณ์โอใหญ่ มีการใช้ในสองกรณีด้วยกัน ซึ่งได้แก่ กรณีเส้นกำกับอนันต์ และ กรณีเส้นกำกับกณิกนันต์ ความแตกต่าง
ระหว่างสองกรณีนี้เป็นความแตกต่างในขั้นการประยุกต์ใช้ มิใช่ในขั้นหลักการ อย่างไรก็ตาม นิยามเชิงรูปนัยของ "โอใหญ่"
นั้นเหมือนกันในทั้งสองกรณี มีเพียงลิมิตสำหรับอาร์กิวเมนต์ของฟังก์ชันเท่านั้นที่แตกต่างกัน



อ่านแล้วได้ความรู้อะไรเยอะเลย อย่างน้อยก็ได้รู้ว่า เรานี่นอกจากจะอ่อนภาษาอังกฤษแล้ว ยังอ่อนภาษาไทยอีกมากๆ เลยนะเนี่ย

ต่ออีกหน่อยนะ ไอ้เจ้าคำว่า "กณิกนันต์" นี่อยากรู้จริงว่ามันแปรว่าอะไรก็คลิกเข้าไปดู พระเจ้า! ยังไม่มีคนให้คำจำกัดความไว้อีกด้วยสิ

http://th.wikipedia.org/wiki/สัญกรณ์โอใหญ่
http://en.wikipedia.org/wiki/Big_O_notation#Multiplication_by_a_constant

Query optimizer : Component

blog ที่แล้วเขียนเกี่ยวกับเรื่อง Query optimizer description ซึ่งไปอ่านเจอจาก wiki

พอดีวันนี้ลองค้นไปเจอ Model ของเจ้าตัว Query optimizer ที่ทาง Orcle ใช้อยู่ (เค้าเขียนว่างั้นนะ)

ลองศึกษาดู Model นี้คร่าวๆ ก็โอเคเลย พบว่าเจ้า Model นี้แหล่ะคือ Model ที่ต้องการ เพราะมันสามารถใช้อธิบายทฤษฏีในหลายๆ เรื่องที่เคยลองอ่านๆ มาได้ดีเลย

ดึงรูปมาจาก :
http://download-east.oracle.com/docs/cd/B14117_01/server.101/b10752/optimops.htm
Syndicate content