30.06.2013 Views

Open Source Optimization Software: GLPK โดย กรุง สิน ... - AS Nida

Open Source Optimization Software: GLPK โดย กรุง สิน ... - AS Nida

Open Source Optimization Software: GLPK โดย กรุง สิน ... - AS Nida

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!