Open Source Optimization Software: GLPK โดย กรุง สิน ... - AS Nida
Open Source Optimization Software: GLPK โดย กรุง สิน ... - AS Nida
Open Source Optimization Software: GLPK โดย กรุง สิน ... - AS Nida
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
ซอฟตแวรตนฉบับเปดเพื่อแกปญหาที่เหมาะที่สุด<br />
<strong>Open</strong> source optimization software<br />
วันที่<br />
2 กันยายน 2547<br />
©<strong>โดย</strong> ผศ. ดร. <strong>กรุง</strong> <strong>สิน</strong>อภิรมยสราญ<br />
ภาควิชาคณิตศาสตร คณะวิทยาศาสตร, จุฬาลงกรณมหาวิทยาลัย,<br />
Email: Krung.S@chula.ac.th, Web: http://pioneer.netserv.chula.ac.th/~skrung<br />
การประชุมวิชาการเครือขายดานการวิจัยดําเนินงาน 1
การนําเสนอ<br />
ซอฟตแวรตนฉบับเปด<br />
ซอฟตแวรแกปญหาที<br />
่เหมาะที่สุด<br />
การแกปญหาที่เหมาะที่สุด<br />
รูปแบบ MPS<br />
ตัวแบบกําหนดการเชิงคณิตศาสตร Mathematical<br />
programming model<br />
อินเตอรเฟสสําหรับโปรแกรมประยุกต API<br />
สรุป<br />
การประชุมวิชาการเครือขายดานการวิจัยดําเนินงาน 2
ซอฟตแวร<br />
พจนานุกรม American Heritage รุน<br />
3 ใหนิยาม<br />
ซอฟตแวรวา<br />
software (sôft/wâr', sŏft/-) n. Computer<br />
Science. 1. The programs, routines, and<br />
symbolic languages that control the<br />
functioning of the hardware and direct its<br />
operation. --attributive. Often used to modify<br />
another noun: software manufacturers;<br />
software sales.<br />
การประชุมวิชาการเครือขายดานการวิจัยดําเนินงาน 3
ซอฟตแวรตนฉบับเปดกับซอฟตแวรฟรี<br />
แจกจายฟรี ไมกีดกันการใชของบุคคลหรือกลุมคนใด<br />
ไมตองมีการขออนุญาตการใชงานจากกลุมบุคคลใด<br />
สามารถใชงานและแกไขปรับปรุงไดตามแตผูใชตองการ<br />
ชื่อซอฟตแวรตนฉบับเปด<br />
สื่อถึงความนาเชื่อถือ<br />
และความเสถียร<br />
ตอการใชงานเพราะผูใชสามารถศึกษาและอานรหัสตนฉบับดวย<br />
ตนเอง ในขณะที่ซอฟตแวรฟรี<br />
เนนความเปนอิสระในการแจกจาย<br />
ใชงาน<strong>โดย</strong>ไมมีกลุมบุคคลใดถือกรรมสิทธิ<br />
การประชุมวิชาการเครือขายดานการวิจัยดําเนินงาน 4
เกณฑการเปนซอฟตแวรตนฉบับเปดหรือฟรี<br />
Free distribution<br />
<strong>Source</strong> code<br />
Derived Works<br />
Integrity of The Author’s<br />
<strong>Source</strong> Code<br />
No Discrimination<br />
Against Persons or<br />
Groups<br />
No Discrimination<br />
Against Fields of<br />
Endeaver<br />
Distribution of License<br />
License Must Not Be<br />
Specific to a Product<br />
The License Must Not<br />
restrict Other <strong>Software</strong><br />
License Must Be<br />
Technology-Neutral<br />
การประชุมวิชาการเครือขายดานการวิจัยดําเนินงาน 5
โครงการปจจุบันของ OSS/FS<br />
Linux Kernel<br />
Apache (web server)<br />
Samba (Windows file<br />
and print sharing)<br />
GNOME (desktop<br />
environment)<br />
KDE (desktop<br />
environment)<br />
GIMP (bitmapped<br />
image editor)<br />
MySQL (database)<br />
PostgreSQL (database)<br />
PHP (Script language)<br />
Mailman (mail manager)<br />
XFree86 (X windows)<br />
GNU Compiler<br />
Collection (C, C++, etc.)<br />
Perl (Script language)<br />
Python (Script language)<br />
Mozilla (Web browser)<br />
<strong>Open</strong>Office.org<br />
การประชุมวิชาการเครือขายดานการวิจัยดําเนินงาน 6
ปญหาที่เหมาะที่สุด<br />
min/<br />
max<br />
z = f ( x)<br />
g(<br />
x)<br />
≤ 0<br />
h(<br />
x)<br />
=<br />
x ∈ R<br />
เมื่อ<br />
f แทนฟงกชันจุดประสงค g แทนอสมการเงื่อนไขบังคับ<br />
h แทน<br />
สมการเงื่อนไขบังคับ<br />
และ x คือตัวแปรอิสระหรือตัวแปรตัด<strong>สิน</strong>ใจ<br />
(Decision variable) ที่อยูในปริภูมิจํานวนจริงมิติ<br />
n<br />
n<br />
0<br />
การประชุมวิชาการเครือขายดานการวิจัยดําเนินงาน 7
ปญหากําหนดการเชิงเสน<br />
min/ max<br />
T<br />
z = c x<br />
Ax ≤ b<br />
x<br />
≥<br />
0<br />
x ∈ R<br />
เมื่อ<br />
c แทนสัมประสิทธิ์ของฟงกชันจุดประสงค<br />
A แทนสัมประสิทธิของ<br />
อสมการเงื่อนไขบังคับ<br />
และ x คือตัวแปรอิสระหรือตัวแปรตัด<strong>สิน</strong>ใจ<br />
(Decision variable) ที่อยูในปริภูมิจํานวนจริงมิติ<br />
n ที่ไมเปนลบ<br />
n<br />
การประชุมวิชาการเครือขายดานการวิจัยดําเนินงาน 8
ปญหากําหนดการเชิงเสนจํานวนเต็มผสม<br />
min/ max<br />
T<br />
z = c x<br />
Ax ≤ b<br />
some x's<br />
are integers<br />
x ∈ R<br />
เมื่อ<br />
c แทนสัมประสิทธิ์ของฟงกชันจุดประสงค<br />
A แทนสัมประสิทธิของ<br />
อสมการเงื่อนไขบังคับ<br />
และ x คือตัวแปรอิสระหรือตัวแปรตัด<strong>สิน</strong>ใจ<br />
(Decision variable) ที่อาจเปนจํานวนจริงหรือจํานวนเต็ม<br />
n<br />
การประชุมวิชาการเครือขายดานการวิจัยดําเนินงาน 9
ซอฟตแวรที่แกปญหาที่เหมาะที่สุดในปจจุบัน<br />
AMPL (A Mathematical<br />
Programming Language)<br />
CPLEX (C simPLEX)<br />
GAMS (General<br />
Algebraic Modeling<br />
System)<br />
<strong>GLPK</strong> (GNU Linear<br />
Programming Kit)<br />
MILES (Mixed<br />
Inequality and nonLinear<br />
Equation Solver)<br />
CONOPT (NLP)<br />
MINOS (NLP)<br />
OSL (LP/MIP from<br />
IBM)<br />
PATH (MCP)<br />
SNOPT (NLP based<br />
on SQP)<br />
XA (LP/MIP)<br />
Xpress (LP/MIP)<br />
การประชุมวิชาการเครือขายดานการวิจัยดําเนินงาน 10
หลักการแกปญหาที่เหมาะที่สุด<br />
ปญหาจริง<br />
โปรแกรมแกปญหาสําเร็จรูป<br />
เชน CPLEX, MINOS, XA<br />
ผูพัฒนาโปรแกรมแกปญหา<br />
จบการทํางาน<br />
ผูเขียนตัวแบบ<br />
ตัวแบบทางคณิตศาสตร<br />
ซอฟตแวรระบบภาษา<br />
การสรางตัวแบบ/ซอฟตแวร<br />
ที่พัฒนาขึ้นเอง<br />
ใช ไมใช<br />
ผลเฉลย ตอบคําถามได<br />
การประชุมวิชาการเครือขายดานการวิจัยดําเนินงาน 11
หลักการแกปญหาที่เหมาะที่สุด<br />
(2)<br />
ปญหาจริง บงบอกตัวแปร ขอมูล ฟงกชันจุดประสงค สมการ/อสมการ<br />
เงื่อนไขบังคับ<br />
และขอบเขตของตัวแปร<br />
ตัวแบบของปญหา สรางจากสวนประกอบคือ เซต/ดรรชนี พารามิเตอร/<br />
ขอมูล ตัวแปร/ผลเฉลย ฟงกชันจุดประสงค เงื่อนไขบังคับ<br />
ภาษาตัวแบบ<strong>โดย</strong>ใชแฟมขอมูลคอมพิวเตอร ซึ่งเก็บในรูปของ<br />
MPS,<br />
Mathematical model, Programming language<br />
โปรแกรมแกปญหาที่เหมาะที่สุดสําเร็จรูป<br />
หาผลเฉลยของตัวแบบที่กําหนด<br />
ผลลัพธ ผานการแปลและวิเคราะหวาสามารถไปแกปญหาจริงหรือไม<br />
การประชุมวิชาการเครือขายดานการวิจัยดําเนินงาน 12
สวนประกอบของตัวแบบ (1)<br />
เซต/ดรรชนี ใชอางถึงคาของตัวแปร หรือคาของพารามิเตอร ณ<br />
ตําแหนงที่สนใจ<br />
พารามิเตอร/ขอมูลเขา เก็บคาของขอมูลที่ใชในการกําหนดเงื่อนไข<br />
ฟงกชัน หรือขอบเขตทั้งหมดในตัวแบบ<br />
สามารถใชเก็บคาที่ได<br />
จากการคํานวณเพื่อนําไปใชในตัวแบบตอไป<br />
ตัวแปร/ผลเฉลย เก็บผลลัพธที่ไดหลังจากใชโปรแกรมแกปญหา<br />
กําหนดการเชิงคณิตศาสตร<br />
การประชุมวิชาการเครือขายดานการวิจัยดําเนินงาน 13
สวนประกอบของตัวแบบ (2)<br />
ฟงกชันจุดประสงค บงบอกการคํานวณคาของผลเฉลยสอดคลอง<br />
กับเงื่อนไขบังคับวามีคาดีที่สุดหรือไม<br />
เงื<br />
่อนไขบังคับที่เขียนในรูปของฟงกชัน<br />
มีทั้งแบบสมการและ<br />
อสมการ<br />
สมการเงื่อนไขบังคับอยูในรูปของ<br />
h(x) = 0<br />
อสมการเงื่อนไขบังคับอยูในรูปของ<br />
g(x) ≤ 0<br />
การประชุมวิชาการเครือขายดานการวิจัยดําเนินงาน 14
ตัวอยางของปญหา<br />
บริษัทผลิต<strong>สิน</strong>คาแหงหนึ่ง<br />
มีแหลงผลิต m แหลงและลูกคาที่<br />
สนใจซื้อ<strong>สิน</strong>คาจากแหลงผลิตใดก็ได<br />
จํานวน n คน บริษัทกังวล<br />
เรื่องคาใชจายในการขนสง<strong>สิน</strong>คาจากแหลงผลิตไปลูกคา<br />
ทาง<br />
บริษัทตองวางแผนการผลิตอยางไร และขน<strong>สิน</strong>คาจํานวนเทาไร<br />
จากแหลงผลิตไปยังลูกคา <strong>โดย</strong>ที่ลูกคาไดรับ<strong>สิน</strong>คาครบตามที่<br />
ตองการและจํานวน<strong>สิน</strong>คาที่ขนสงจากแหลงผลิตไมเกินความจุของ<br />
การขนสงที่กําหนดให<br />
<strong>โดย</strong>ใหมีคาใชจายในการขนสงต่ําที่สุด<br />
สมมติวาบริษัทไมสนใจคาใชจายอื่น<br />
การประชุมวิชาการเครือขายดานการวิจัยดําเนินงาน 15
ตัวอยางของตัวแบบ (1)<br />
เซต<br />
แหลงผลิต 1, 2, …, m<br />
ลูกคา 1, 2, …, n<br />
พารามิเตอร<br />
คาขนสงตอหนวย<strong>สิน</strong>คาจาก<br />
แหลงผลิตมายังลูกคา<br />
ปริมาณความจุในการขนสง<br />
ปริมาณที่ผลิตและความตองการ<br />
ตัวแปรคือปริมาณ<strong>สิน</strong>คาที่ขนสง<br />
ปญหาจริง<br />
โปรแกรมแกปญหาสําเร็จรูป<br />
เชน CPLEX, MINOS, XA<br />
ผูพัฒนาโปรแกรมแกปญหา<br />
จบการทํางาน<br />
ผูเขียนตัวแบบ<br />
ตัวแบบทางคณิตศาสตร<br />
ซอฟตแวรระบบภาษา<br />
การสรางตัวแบบ/ซอฟตแวร<br />
ที่พัฒนาขึ้นเอง<br />
ใช ไมใช<br />
ผลเฉลย ตอบคําถามได<br />
การประชุมวิชาการเครือขายดานการวิจัยดําเนินงาน 16
ตัวอยางของตัวแบบ (2)<br />
ฟงกชันจุดประสงค<br />
คาใชจายที่ใชคํานวณจากตัว<br />
แปรและพารามิเตอรที่กําหนด<br />
เงื่อนไขบังคับ<br />
<strong>สิน</strong>คาที่สงออกจากแหลงผลิต<br />
ตองไมเกินปริมาณที่ผลิตได<br />
ปริมาณที่ขนไปยังลูกคาตองไม<br />
ต่ํากวาความตองการที่รับมา<br />
สงไมเกินความจุของการขนสง<br />
ปญหาจริง<br />
โปรแกรมแกปญหาสําเร็จรูป<br />
เชน CPLEX, MINOS, XA<br />
ผูพัฒนาโปรแกรมแกปญหา<br />
จบการทํางาน<br />
ผูเขียนตัวแบบ<br />
ตัวแบบทางคณิตศาสตร<br />
ซอฟตแวรระบบภาษา<br />
การสรางตัวแบบ/ซอฟตแวร<br />
ที่พัฒนาขึ้นเอง<br />
ใช ไมใช<br />
ผลเฉลย ตอบคําถามได<br />
การประชุมวิชาการเครือขายดานการวิจัยดําเนินงาน 17
ตัวแบบในแฟมขอมูลคอมพิวเตอร<br />
แฟมในรูปแบบ MPS (Mathematical<br />
Programming System format)<br />
แฟมในรูปแบบตัวแบบกําหนดการเชิงคณิตศาสตร<br />
(Mathematical programming model)<br />
แฟมในรูปแบบอื่น<br />
(Other formats) เชน รหัสตนฉบับ<br />
ภาษาซี <strong>โดย</strong>ใชตัวแปลภาษา (compiler) เปลี่ยนใหเปน<br />
โปรแกรมที่ทํางานบนเครื่อง<br />
การประชุมวิชาการเครือขายดานการวิจัยดําเนินงาน 18
ตัวแบบกําหนดการเชิงเสนที่ใช<br />
MPS<br />
รูปแบบทั่วไป<br />
ROWS: c1 x1 + … + cn xn (≤=≥) RHS<br />
BOUND: xi = LO | UP | FX | FR | MI | PL<br />
เมื่อ<br />
ROWS แทนชื่อของแถว<br />
ci แทนคาของหลักของตัวแปร xi RHS แทนคาทางดานขวา รหัส ≤ แทนดวย L, = แทนดวย E, ≥ แทนดวย G<br />
หรือใช N แทนแถวที่เปนฟงกชันจุดประสงคที่ตองการหาคาต่ําสุด<br />
(ไมเปนมาตรฐาน)<br />
BOUND แทนขอบเขตของตัวแปร LO (Lower bound), UP (Upper<br />
bound), FX (Fixed), FR (Free), MI (Minus infinity), PL<br />
(Plus infinity)<br />
การประชุมวิชาการเครือขายดานการวิจัยดําเนินงาน 19
แฟมในรูปแบบ MPS<br />
MPS เปนรูปแบบของแฟม<br />
ที่เก็บตัวแบบในรูปของ<br />
<strong>AS</strong>CII<br />
แตละบรรทัดของแฟม MPS<br />
แบงออกเปนสองประเภทคือ<br />
บรรทัดบงชี้ชนิดของขอมูล<br />
ในบรรทัดถัดไปวาเปนอะไร<br />
บรรทัดขอมูล<br />
เงื่อนไขของแถวแรก<br />
N แทน<br />
ฟงกชันจุดประสงคที่ตองการ<br />
หาคาต่ําสุด<br />
NAME TRNSPORT<br />
ROWS<br />
N COST<br />
L SUP1<br />
L SUP2<br />
G DEM1<br />
G DEM2<br />
G DEM3<br />
COLUMNS<br />
X11 COST 0.22500<br />
X11 SUP1 1.00000<br />
X11 DEM1 1.00000<br />
X12 COST 0.15300<br />
X12 SUP1 1.00000<br />
X12 DEM2 1.00000<br />
X13 COST 0.16200<br />
X13 SUP1 1.00000<br />
การประชุมวิชาการเครือขายดานการวิจัยดําเนินงาน 20
ลําดับสวนประกอบของ MPS<br />
NAME (indicator card)<br />
ROWS (indicator card)<br />
data cards<br />
COLUMNS (indicator card)<br />
data cards<br />
RHS (indicator card)<br />
data cards<br />
RANGES (indicator card)<br />
data cards<br />
BOUNDS (indicator card)<br />
data cards<br />
ENDATA (indicator card)<br />
RHS<br />
X13 DEM3 1.00000<br />
X21 COST 0.22500<br />
X21 SUP2 1.00000<br />
X21 DEM1 1.00000<br />
X22 COST 0.16200<br />
X22 SUP2 1.00000<br />
X22 DEM2 1.00000<br />
X23 COST 0.12600<br />
X23 SUP2 1.00000<br />
X23 DEM3 1.00000<br />
RHS SUP1 350.00000<br />
RHS SUP2 600.00000<br />
RHS DEM1 325.00000<br />
RHS DEM2 300.00000<br />
RHS DEM3 275.00000<br />
ENDATA<br />
การประชุมวิชาการเครือขายดานการวิจัยดําเนินงาน 21
แฟมในรูปแบบ MPS ที่มีตัวแปรจํานวนเต็ม<br />
ใช marker card<br />
คําสั่ง<br />
INTORG (indicator<br />
card) เริ่มบอกตัวแปรจํานวนเต็ม<br />
คําสั่ง<br />
INTEND (indicator<br />
card) จบการบอกตัวแปรจํานวนเต็ม<br />
ตัวแปรอื่นที่ประกาศนอกกรอบ<br />
ดังกลาวเปนตัวแปรที่มีคาตอเนื่อง<br />
ใชประกาศในสวนของ<br />
BOUNDS<br />
ใช UI แทน upper integer<br />
ใช BV แทน binary variable<br />
NAME SAMP1<br />
ROWS<br />
N Z<br />
G R1<br />
COLUMNS<br />
X1 R1 2.0<br />
MARK0001 ‘MARKER’ ‘INTORG’<br />
X2 R1 -1.0<br />
X3 R1 1.0<br />
MARK0002 ‘MARKER’ ‘INTEND’<br />
RHS<br />
RHS1 R1 1.0<br />
BOUNDS<br />
UP BND1 X1 4.0<br />
LO BND1 X2 2.0<br />
UP BND1 X2 5.0<br />
LO BND1 X3 1.0<br />
UP BND1 X3 3.0<br />
ENDDATA<br />
การประชุมวิชาการเครือขายดานการวิจัยดําเนินงาน 22
ตัวแบบ GNU MathProg<br />
เซต (set)<br />
พารามิเตอร (param)<br />
ตัวแปร (var)<br />
ฟงกชันจุดประสงค (minimize/maximize)<br />
ฟงกชันเงื่อนไขบังคับ<br />
(subject to/s. t.)<br />
คําสั่งอื่น<br />
ๆ (display)<br />
การประชุมวิชาการเครือขายดานการวิจัยดําเนินงาน 23
การประชุมวิชาการเครือขายดานการวิจัยดําเนินงาน 24<br />
ตัวแบบกําหนดการเชิงเสน GNU MathProg<br />
m<br />
n<br />
m<br />
mn<br />
m<br />
m<br />
m<br />
m<br />
m<br />
n<br />
m<br />
n<br />
m<br />
m<br />
n<br />
m<br />
n<br />
m<br />
m<br />
n<br />
m<br />
n<br />
m<br />
m<br />
b<br />
x<br />
a<br />
x<br />
a<br />
x<br />
a<br />
x<br />
b<br />
x<br />
a<br />
x<br />
a<br />
x<br />
a<br />
x<br />
b<br />
x<br />
a<br />
x<br />
a<br />
x<br />
a<br />
x<br />
c<br />
x<br />
c<br />
x<br />
c<br />
x<br />
c<br />
Z<br />
)<br />
|<br />
|<br />
(<br />
...<br />
:<br />
)<br />
|<br />
|<br />
(<br />
...<br />
:<br />
)<br />
|<br />
|<br />
(<br />
...<br />
:<br />
s<br />
constraint<br />
linear<br />
subject to<br />
...<br />
:<br />
maximize)<br />
(or<br />
minimize<br />
2<br />
2<br />
1<br />
1<br />
2<br />
2<br />
2<br />
22<br />
1<br />
21<br />
2<br />
1<br />
1<br />
2<br />
12<br />
1<br />
11<br />
1<br />
0<br />
2<br />
2<br />
1<br />
1<br />
≥<br />
=<br />
≤<br />
+<br />
+<br />
+<br />
≥<br />
=<br />
≤<br />
+<br />
+<br />
+<br />
≥<br />
=<br />
≤<br />
+<br />
+<br />
+<br />
+<br />
+<br />
+<br />
+<br />
+<br />
+<br />
+<br />
+<br />
+<br />
+<br />
+<br />
+<br />
+<br />
+<br />
+<br />
+
ตัวอยาง GNU MathProg (set,param,var)<br />
เซตของแหลงผลิต I<br />
เซตของลูกคา J<br />
พารามิเตอร<br />
ปริมาณการผลิต a<br />
ปริมาณความตองการ b<br />
ระยะทางขนสง d<br />
อัตราคาใชจายตอหนวยตอพันไมล f<br />
คาขนสงตอหนวย<strong>สิน</strong>คา c<br />
ตัวแปร x ≥ 0<br />
set I; /* canning plants */<br />
set J; /* markets */<br />
param a{I}; /* capacity */<br />
param b{J}; /* demand */<br />
param d{I, J}; /* distance */<br />
param f; /* $/case/K miles */<br />
param c{i in I, j in J} := f<br />
* d[i,j] / 1000; /*<br />
transport cost $K/case */<br />
var x{I, J} >= 0; /* shipment<br />
quantities in cases */<br />
การประชุมวิชาการเครือขายดานการวิจัยดําเนินงาน 25
ตัวอยาง GNU MathProg (obj., constr.)<br />
ฟงกชันจุดประสงค<br />
minimize cost<br />
ฟงกชันเงื่อนไขบังคับ<br />
ปริมาณขนสงไมเกินการผลิต<br />
ปริมาณสงถึงไมต่ํากวาความ<br />
ตองการ<br />
ปริมาณที่ผลิตและความตองการ<br />
minimize cost: sum{i in I, j<br />
in J} c[i,j] * x[i,j];<br />
/* total transportation<br />
costs in thousands of<br />
dollars */<br />
s.t. supply{i in I}: sum{j<br />
in J} x[i,j] = b[j];<br />
/* satisfy demand */<br />
การประชุมวิชาการเครือขายดานการวิจัยดําเนินงาน 26
ตัวอยาง GNU MathProg (data)<br />
ขอมูลจากปญหา<br />
กําหนด set<br />
กําหนด<br />
param<br />
data;<br />
set I := Seattle San-Diego;<br />
set J := New-York Chicago Topeka;<br />
param a := Seattle 350<br />
San-Diego 600;<br />
param b := New-York 325<br />
Chicago 300<br />
Topeka 275;<br />
param d : New-York Chicago Topeka :=<br />
Seattle 2.5 1.7 1.8<br />
San-Diego 2.5 1.8 1.4;<br />
param f := 90;<br />
end;<br />
การประชุมวิชาการเครือขายดานการวิจัยดําเนินงาน 27
<strong>GLPK</strong> API<br />
<strong>GLPK</strong> API (GNU Linear Programming Kit<br />
Application Programming Interface)<br />
ประกอบดวยเซตของรูทีนที่เขียน<strong>โดย</strong>ใชภาษาซีตามมาตรฐาน<br />
ANSI C<br />
วัตถุประสงคเพื่อใหผูพัฒนาโปรแกรมสามารถนํารูทีนไปใชตอได<br />
ขั้นตอนวิธีที่เรียกใชได<br />
simplex method (revised),<br />
interior point method, branch-and-bound<br />
method<br />
การประชุมวิชาการเครือขายดานการวิจัยดําเนินงาน 28
การประชุมวิชาการเครือขายดานการวิจัยดําเนินงาน 29<br />
ตัวแบบกําหนดการเชิงเสนที<br />
่ใชใน API (1)<br />
n<br />
m<br />
mn<br />
m<br />
m<br />
m<br />
m<br />
m<br />
n<br />
m<br />
n<br />
m<br />
m<br />
n<br />
m<br />
n<br />
m<br />
m<br />
n<br />
m<br />
n<br />
m<br />
m<br />
x<br />
a<br />
x<br />
a<br />
x<br />
a<br />
x<br />
x<br />
a<br />
x<br />
a<br />
x<br />
a<br />
x<br />
x<br />
a<br />
x<br />
a<br />
x<br />
a<br />
x<br />
c<br />
x<br />
c<br />
x<br />
c<br />
x<br />
c<br />
Z<br />
+<br />
+<br />
+<br />
+<br />
+<br />
+<br />
+<br />
+<br />
+<br />
+<br />
+<br />
+<br />
+<br />
+<br />
+<br />
=<br />
+<br />
+<br />
+<br />
=<br />
+<br />
+<br />
+<br />
=<br />
+<br />
+<br />
+<br />
+<br />
=<br />
...<br />
...<br />
...<br />
s<br />
constraint<br />
linear<br />
subject to<br />
...<br />
maximize)<br />
(or<br />
minimize<br />
2<br />
2<br />
1<br />
1<br />
2<br />
2<br />
22<br />
1<br />
21<br />
2<br />
1<br />
2<br />
12<br />
1<br />
11<br />
1<br />
0<br />
2<br />
2<br />
1<br />
1
ตัวแบบกําหนดการเชิงเสนที่ใชใน<br />
API (2)<br />
l<br />
l<br />
m+<br />
n<br />
l<br />
1<br />
2<br />
≤<br />
≤<br />
≤<br />
x<br />
x<br />
x<br />
1<br />
2<br />
<br />
m+<br />
n<br />
≤<br />
≤<br />
u<br />
≤<br />
u<br />
1<br />
2<br />
u<br />
m+<br />
n<br />
เมื่อ<br />
x1 , x2 , …, xm เปนตัวแปรชวย xm+1 , xm+2 , …, xm+n เปนตัวแปร<br />
โครงสราง Z เปนตัวแปรของฟงกชันจุดประสงค c1 , c2 , …, cn เปนสัมประสิทธิ<br />
ของฟงกชันจุดประสงค c0 เปนคาคงตัว (shift) ของฟงกชันจุดประสงค a11 , a12 ,<br />
…, amn เปนสัมประสิทธิของเงื่อนไขบังคับ<br />
l1 , l2 , …, lm+n เปนขอบเขตลางของ<br />
ตัวแปร และ u1 , u2 , …, um+n เปนขอบเขตบนของตัวแปร<br />
การประชุมวิชาการเครือขายดานการวิจัยดําเนินงาน 30
ขั้นตอนการเขียนซอฟตแวรที่ใช<br />
<strong>GLPK</strong> API<br />
เริ่มตน<br />
แปลงเปนตัวแบบมาตรฐาน<br />
กําหนดตัวแปรที่ใชในโปรแกรม<br />
สรางตัวแบบ<strong>โดย</strong>ใช LPX<br />
เก็บขอมูลเขา<br />
กําหนดคาในตัวแปรประเภท LPX<br />
เลือกรูทีนแกปญหา สั่งประมวลผล<br />
อานขอมูลจาก LPX<br />
พรอมแสดงผลลัพธ<br />
จบ<br />
การประชุมวิชาการเครือขายดานการวิจัยดําเนินงาน 31
การประชุมวิชาการเครือขายดานการวิจัยดําเนินงาน 32<br />
ตัวอยางปญหากําหนดการเชิงเสนที<br />
่เรียกใช API<br />
0<br />
,<br />
,<br />
300<br />
6<br />
2<br />
2<br />
600<br />
5<br />
4<br />
10<br />
100<br />
subject to<br />
4<br />
6<br />
10<br />
maximize<br />
3<br />
2<br />
1<br />
3<br />
2<br />
1<br />
3<br />
2<br />
1<br />
3<br />
2<br />
1<br />
3<br />
2<br />
1<br />
≥<br />
≤<br />
+<br />
+<br />
≤<br />
+<br />
+<br />
≤<br />
+<br />
+<br />
+<br />
+<br />
=<br />
x<br />
x<br />
x<br />
x<br />
x<br />
x<br />
x<br />
x<br />
x<br />
x<br />
x<br />
x<br />
x<br />
x<br />
x<br />
Z<br />
,<br />
300<br />
,<br />
600<br />
,<br />
100<br />
,<br />
,<br />
,<br />
0<br />
6<br />
2<br />
2<br />
5<br />
4<br />
10<br />
subject to<br />
4<br />
6<br />
10<br />
maximize<br />
3<br />
2<br />
1<br />
3<br />
2<br />
1<br />
3<br />
2<br />
1<br />
3<br />
2<br />
1<br />
3<br />
2<br />
1<br />
≤<br />
≤<br />
−∞<br />
≤<br />
≤<br />
−∞<br />
≤<br />
≤<br />
∞<br />
−<br />
+∞<br />
≤<br />
≤<br />
+<br />
+<br />
=<br />
+<br />
+<br />
=<br />
+<br />
+<br />
=<br />
+<br />
+<br />
=<br />
r<br />
q<br />
p<br />
x<br />
x<br />
x<br />
x<br />
x<br />
x<br />
r<br />
x<br />
x<br />
x<br />
q<br />
x<br />
x<br />
x<br />
p<br />
x<br />
x<br />
x<br />
Z<br />
แปลง
ตัวอยางโปรแกรมภาษาซี (1)<br />
#include <br />
#include <br />
#include <br />
int main(void) {<br />
LPX *lp;<br />
int ia[1+9], ja[1+9];<br />
double a[1+9], Z, x1, x2, x3;<br />
s1: lp = lpx_create_prob();<br />
s2: lpx_set_prob_name(lp,“ex");<br />
s3: lpx_add_rows(lp, 3);<br />
s4: lpx_set_row_name(lp,1,"p");<br />
s5: lpx_set_row_bnds(lp,1,<br />
LPX_UP,0.0,100.0);<br />
s6: lpx_set_row_name(lp,2,"q");<br />
s7: lpx_set_row_bnds(lp,2,<br />
LPX_UP,0.0,600.0);<br />
s8: lpx_set_row_name(lp,3,"r");<br />
s9: lpx_set_row_bnds(lp,3,<br />
LPX_UP,0.0,300.0);<br />
s10: lpx_add_cols(lp, 3);<br />
s11: lpx_set_col_name(lp,1,"x1");<br />
s12: lpx_set_col_bnds(lp,1,<br />
LPX_LO,0.0,0.0);<br />
s13: lpx_set_col_name(lp,2,"x2");<br />
s14: lpx_set_col_bnds(lp,2,<br />
LPX_LO,0.0,0.0);<br />
s15: lpx_set_col_name(lp,3,"x3");<br />
s16: lpx_set_col_bnds(lp,3,<br />
LPX_LO,0.0,0.0);<br />
s17: rn[1]=1, cn[1]=1, a[1]=1.0;<br />
s18: rn[2]=1, cn[2]=2, a[2]=1.0;<br />
s19: rn[3]=1, cn[3]=3, a[3]=1.0;<br />
s20: rn[4]=2, cn[4]=1, a[4]=10.0;<br />
s21: rn[5]=3, cn[5]=1, a[5]=2.0;<br />
s22: rn[6]=2, cn[6]=2, a[6]=4.0;<br />
s23: rn[7]=3, cn[7]=2, a[7]=2.0;<br />
s24: rn[8]=2, cn[8]=3, a[8]=5.0;<br />
s25: rn[9]=3, cn[9]=3, a[9]=6.0;<br />
การประชุมวิชาการเครือขายดานการวิจัยดําเนินงาน 33
ตัวอยางโปรแกรมภาษาซี (2)<br />
s26: lpx_load_mat3(lp,9,rn,cn,a);<br />
s27: lpx_set_obj_dir(lp,LPX_MAX);<br />
s28: lpx_set_col_coef(lp,1,10.0);<br />
s29: lpx_set_col_coef(lp,2, 6.0);<br />
s30: lpx_set_col_coef(lp,3, 4.0);<br />
s31: lpx_simplex(lp);<br />
s32: Z = lpx_get_obj_val(lp);<br />
s33: lpx_get_col_info(lp,1,NULL,<br />
&x1, NULL);<br />
s34: lpx_get_col_info(lp,2,NULL,<br />
&x2, NULL);<br />
s35: lpx_get_col_info(lp,3,NULL,<br />
&x3, NULL);<br />
s36: printf("\nZ = %g; x1 = %g; x2<br />
= %g; x3 = %g\n",Z,x1,x2,x3);<br />
s37: lpx_delete_prob(lp);<br />
return 0;<br />
} /* eof */<br />
บรรทัดที่<br />
s36 แสดงผลเฉลย<br />
ของปญหากําหนดการเชิงเสนที่<br />
กําหนด<strong>โดย</strong>ผลลัพธเปน<br />
Z = 733.333; x1 = 33.3333; x2 =<br />
66.6667; x3 = 0<br />
การประชุมวิชาการเครือขายดานการวิจัยดําเนินงาน 34
สรุป<br />
ลักษณะของซอฟตแวรตนฉบับเปด<br />
การแกปญหาที่เหมาะที่สุด<br />
การนําขอมูลกับวิธีการเรียกใช โปรแกรมแกปญหาที่เหมาะที่สุด<br />
สําเร็จรูป<br />
วิธีการสรางแฟม (MPS)<br />
วิธีการเขียนตัวแบบ (Model)<br />
วิธีการพัฒนาโปรแกรมจาก API (Programming<br />
language)<br />
การประชุมวิชาการเครือขายดานการวิจัยดําเนินงาน 35
เอกสารอางอิง<br />
A Brooke, D. Kendrick, and A. Meeraus. GAMS: A User’s Guide. The Scientific Press,<br />
CA, 1988.<br />
CPLEX <strong>Optimization</strong> Inc., Incline Village, Nevada. Using the CPLEX(TM) Linear<br />
Optimizer and CPLEX(TM) Mixed Integer Optimizer (Version 2.0), 1992.<br />
Dash Associates, BlisWorth House, UK. XPRESS-MP User Guide.<br />
http://www.dashopt.com/<br />
M. C. Ferris and T. S. Muson. GAMS/PATH User Guide: Version 4.3. Department of<br />
Computer Sciences, University of Wisconsin-Madison<br />
R. Fourer, D. M. Gay, and B. W. Kernighan. AMPL: A Modeling Language for<br />
Mathematical Programming. Duxbury Press, 1993.<br />
Andrew Makhorin. GNU Linear Programming Kit: Modeling Language GNU<br />
MathProg, version 4.4. Department of Applied Informatics, Moscow Aviation<br />
Institute, Moscow, Russia.<br />
B. A. Murtagh and M. A. Saunders. MINOS 5.0 User’s Guide. Technical Report SOL<br />
83.20, Stanford University, Stanford, California 1983.<br />
T. F. Rutherford. MILES: A mixed inequality and nonlinear equation solver. Working<br />
Paper, Department of Economics, University of Colorado, 1993.<br />
การประชุมวิชาการเครือขายดานการวิจัยดําเนินงาน 36
เว็บ OSS/FS (1)<br />
http://www.opensource.org/<br />
http://www.gnu.org/<br />
http://www.dwheeler.com/oss_fs_why.html<br />
http://us4.samba.org/samba/<br />
http://www.apache.org/<br />
http://www.gnome.org/<br />
http://www.kde.org/<br />
http://www.gimp.org/<br />
http://www.mysql.org/<br />
การประชุมวิชาการเครือขายดานการวิจัยดําเนินงาน 37
เว็บ OSS/FS (2)<br />
http://www.postgresql.org/<br />
http://www.php.net/<br />
http://www.xfree86.org/<br />
http://www.perl.org/, http://www.perl.com/<br />
http://www.python.org/<br />
http://www.mozilla.org/<br />
http://www.openoffice.org/<br />
http://www.mingw.org/<br />
http://gcc.gnu.org/ and others<br />
การประชุมวิชาการเครือขายดานการวิจัยดําเนินงาน 38
เว็บซอฟตแวรแกปญหาที่เหมาะที่สุด<br />
http://www.ampl.com/ (AMPL)<br />
http://www.ilog.com/products/cplex/ (CPLEX)<br />
http://www.gams.com/ (GAMS)<br />
http://www.gnu.org/software/glpk/glpk.html (GKPK)<br />
http://www.conopt.com/ (CONOPT)<br />
http://www.stanford.edu/group/SOL/ (MINOS)<br />
http://www.ibm.com/software/data/bi/osl/ (OSL)<br />
http://www.sunsetsoft.com/ (XA)<br />
http://www.dashoptimization.com/ (XPRESS)<br />
การประชุมวิชาการเครือขายดานการวิจัยดําเนินงาน 39