1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Tài liệu về tối ưu hóa - phương pháp tính

26 852 4
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Tối ưu hóa - Phương pháp tỉ lệ vàng
Trường học Trường Đại Học
Thể loại Tài liệu
Định dạng
Số trang 26
Dung lượng 163 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Tài liệu về tối ưu hóa - phương pháp tính

Trang 1

CHƯƠNG 8: TỐI ƯU HOÁ

§1 PHƯƠNG PHÁP TỈ LỆ VÀNG

Trong chương 8 chúng ta đã xét bài toán tìm nghiệm của phương trình phi tuyến tức là tìm giá trị của x mà tại đó hàm triệt tiêu Trong phần này chúng ta sẽ đặt vấn đề tìm giá trị của x mà tại đó hàm đạt giá trị cực trị(cực đại hay cực tiểu) Phương pháp tiết diện vàng là một phương pháp đơn giản

và hiệu quả để tìm giá trị cực trị của hàm

Giả sử ta có hàm y = f(x) và cần tìm giá trị cực trị trong khoảng [a, b] Khi tìm nghiệm chỉ cần biết 2 giá trị của hàm là ta khẳng định được nghiệm

có nằm trong khoảng đã cho hay không bằng cách xét dấu của hàm Khi tìm giá trị cực trị ta phải biết thêm một giá trị nữa của hàm trong khoảng [a, b] thì mới khẳng định được hàm có đạt cực trị trong đoạn đã cho hay không Sau

đó ta chọn thêm một điểm thứ tư và xác định xem giá trị cực trị của hàm sẽ nằm trong đoạn nào

Theo hình vẽ,khi chọn điểm trung gian c ta có:

và để tiện tính toán ta chọn :

1

2 0

1

2 2

1

1

l

ll

02

1

52

)1(411

Giá trị này đã được biết từ thời cổ đại và được gọi là “tỉ lệ vàng” Như trên

đã nói, phương pháp tỉ lệ vàng được bắt đầu bằng 2 giá trị đã cho của biến x

là a và b Sau đó ta chọn 2 điểm x và x bên trong khoảng [a, b] theo tỉ lệ

l0

l1 l2

c

Trang 2

vàng: 0.61803

2

15

Cái lợi của phương pháp tỉ lệ vàng theo hình a là giá trị x1 cũ trở thành giá trị

x2 mới nên giá trị f(x2) mới chính là giá trị f(x1) cũ nên ta không cần tính lại nó Chương trình mô tả thuật toán trên như sau:

x2 cũ x1 cũ

Trang 3

x1=x2;

Trang 4

f2=f(x2);

}lap=lap+1;

if (f1>f2) xopt=x1;

else xopt=x2;

if (xopt!=0) s=(1.0-r)*fabs((xu-xl)/xopt)*100; }

Trang 5

if (f1<f2) {

if (f1<f2) xopt=x1;

else xopt=x2;

if (xopt!=0) s=(1.0-r)*fabs((xu-xl)/xopt)*100;

Trang 6

printf("Cho khoang can tim cuc tri\n");

printf("Cho can duoi a = ");

printf("x cuc dai = %10.5f\n",x);

printf("y cuc dai = %10.5f\n",y);

)x(x

x

i

i i

1

Một cách tương tự,để tìm giá trị cực trị của hàm f(x) ta đặt g(x)=f′(x).Như vậy

ta cần tìm giá trị của x để g(x) = 0 Như vậy công thức lặp Newton-Raphson

sẽ là:

)x(f

)x(fx)x(g

)x(gx

x

i

i i

i

i i

Trang 7

Các đạo hàm f′(xi) và f″(xi) được xác định theo các công thức:

i i

i i

i

h

)hx()x(2)hx()

x

(

f

h2

)hx()hx()

x

(

f

−+

−+

=

′′

−+

=

Tại giá trị f′(x) = 0 hàm đạt giá trị cực đại nếu f″(x) < 0 và cực tiểu nếu f″(x) >

0 Chương trình sau mô tả thuật toán trên

Trang 8

printf("Khong hoi tu sau 1000 lan lap");

getch();

exit(1);

} }

Trang 9

vậy trong khoảng [a, b] ta chọn thêm một điểm x bất kì và xấp xỉ hàm f(x) bằng parabol qua 3 điểm a, x và b Sau đó ta đạo hàm và cho nó bằng 0 để tìm

ra điểm cực trị của parabol này Giá trị đó được tính bằng công thức:

)xa)(

b(2)ab)(

x(2)bx)(

a(2

)xb)(

b()ab)(

x()bx)(

a(

−+

−+

−+

−+

=

Sau đó tương tự phương pháp tỉ lệ vàng ta loại trừ vùng không chứa giá trị cực trị và tiếp tục quá trình trên cho đến khi đạt độ chính xác mong muốn Chương trình được viết như sau:

printf("Cho doan can tim cuc tri [a,b]\n");

printf("Cho diem dau a = ");

scanf("%f",&a);

printf("Cho diem cuoi b = ");

scanf("%f",&b);

x0=a;

Trang 10

if (x3>x1) x0=x1;

else x2=x1;

§4 PHƯƠNG PHÁP ĐƠN HÌNH (SIMPLEX METHOD)

Trong thực tế nhiều bài toán kinh tế, vận tải có thể được giải quyết nhờ phương pháp quy hoạch tuyến tính Trước hết ta xét bài toán lập kế hoạch sản xuất sau:

Một công ty muốn sản xuất 2 loại sản phẩm mới là A và B bằng các nguyên liệu 1, 2 và 3 Suất tiêu hao nguyên liệu để sản xuất các sản phẩm cho ở bảng sau:

Trang 11

7 đơn vị nguyên liệu 2 và 3 đơn vị nguyên liệu 3 Tiền lãi một đơn vị sản phảm A là 4.000.000 đ, một đơn vị sản phẩm B là 5.000.000đ Lập kế hoạch sản xuất sao cho công ty thu được tiền lãi lớn nhất.

Bài toán này là bài toán tìm cực trị có điều kiện Gọi x1 là lượng sản phẩm A và x2 là lượng sản phẩm B ta đi đến mô hình toán học:

f(x) = 4x1 + 5x2→ max

với các ràng buộc :

2x1 + x2≤ 8 (ràng buộc về nguyên liệu 1)

x1 + 2x2≤ 7 (ràng buộc về nguyên liệu 2)

x2 ≤ 3 (ràng buộc về nguyên liệu 3)

x1 ≥ 0,x2≥ 0

Một cách tổng quát ta có bài toán được phát biểu như sau: Cho hàm mục tiêu CTX → max với điều kiện ràng buộc AX ≤ B và X ≥ 0 Thuật toán để giải bài toán gồm hai giai đoạn

- tìm một phương án cực biên một đỉnh

- kiểm tra điều kiện tối ưu đối với phương án tìm được ở giai đoạn 1 Nếu điều kiện tối ưu được thoả mãn thì phương án đó là tối ưu Nếu không ta chuyển sang phương án mới

Chương trình giải bài toán được viết như sau:

Chương trình 8-4

//simplex;

#include <conio.h>

#include <stdio.h>

Trang 12

int m,n,n1,it,i,j,h1,h2,hi,m1,ps,pz,v,p;float bv[20];

if (i==j)

a[i][h2+j]=1.0;

}it=0;

Trang 14

} }

if (p==1) bv[pz]=ps;

hi=a[pz][ps];

for (j=1;j<=n1;j++) a[pz][j]=a[pz][j]/hi;

if (pz!=1) for (i=1;i<=pz-1;i++)

{ hi=a[i][ps];

for (j=1;j<=n1;j++)

a[i][j]=a[i][j]-hi*a[pz][j];

}for (i=pz+1;i<=m1;i++) {

hi=a[i][ps];

for (j=1;j<=n1;j++) a[i][j]=a[i][j]-hi*a[pz][j];

} }

else printf("Nghiem bat thuong");

Trang 16

for (j=1;j<=n;j++)

if (p==2)

{ printf("z[%d] = ",j);

scanf("%f",&a[j][n1]);

} else

{ printf("z[%d] = ",j);

else {

v=0;

for (i=1;i<=m;i++)

if (bv[i]==j)

Trang 17

{ v=i;

i=m;

}

if (v==0) x=0.0;

else x=a[v][n1];

}printf("x[%d] = %10.5f\n",j,x);

= 15 ; b[2] = 9 ; b[3] = 18; b[4] = 5 ; z[1] = 80 ; z[2] = 56 ; z[3] = 48 và nhận được kết quả :

x[1] = 0 ; x[2] = 2.5 ; x[3] =2.5 và trị của hàm mục tiêu là 260

§5 PHƯƠNG PHÁP THẾ VỊ

Trong vận tải ta thường gặp bài toán vận tải phát biểu như sau: có n thùng hàng của một hãng xây dựng cần chuyển tới n địa điểm khác nhau Giá vận tới tới mỗi địa điểm đã cho Tìm phương án vận chuyển để giá thành

là cực tiểu

Trang 18

374853427029

514347334242

453623374381

262953283560

Để giải bài toán ta dùng thuật toán Hungary như sau:

- trừ mỗi dòng cho số min của dòng đó ta có:

20292602941

8192413410

181014099

22130142058

03272934

- trừ mỗi cột cho số min của cột đó

20262602041

8162413320

12714009

22100141158

00272034

Mục tiêu của thuật toán Hungary là biến đổi ma trận giá thành sao cho

có thể đọc giá trị tối ưu từ ma trận Điều này được thực hiện khi mỗi hàng và cột chứa ít nhất một số 0 Nếu ta vẽ một đoạn thẳng qua mỗi hàng và cột chứa số 0 thì khi đó số đoạn thẳng tối thiểu qua tất cả các số 0 phải là 6 Trong ma trận trên ta chỉ mới dùng 5 đoạn thẳng nghĩa là chưa có giá trị tối

Trang 19

ưu Để biến đổi tiếp tục ta tìm trị min của các phần tử chưa nằm trên bất kì đoạn thẳng nào Trị số đó là 7 Lấy các phần tử không nằm trên đoạn thẳng nào trừ đi 7 và công các phần tử nằm trên hai đoạn thẳng với 7 ta có ma trận:

13191902041

191713320

507009

22100211865

00279741

Do số đoạn thẳng tối thiểu còn là 5 nên ta lặp lại bước trên và nhận được ma trận mới:

12181901941

081713310

5081010

2190211765

002810742

Số đoạn thẳng cần để qua hết các số 0 là 6 nghĩa là ta đã tìm được trị tối ưu.Ta đánh dấu 6 số 0 sao cho mỗi hàng và mỗi cột chỉ có 1 số được đánh dấu Chỉ số các số 0 được đánh dấu cho ta trị tối ưu:

a15 = 0 nghĩa là thùng 1 được vận chuyển tới địa điểm 5

a24 = 0 nghĩa là thùng 2 được vận chuyển tới địa điểm 4

a32 = 0 nghĩa là thùng 3 được vận chuyển tới địa điểm 2

a46 = 0 nghĩa là thùng 4 được vận chuyển tới địa điểm 6

a53 = 0 nghĩa là thùng 5 được vận chuyển tới địa điểm 3

a61 = 0 nghĩa là thùng 6 được vận chuyển tới địa điểm 1

Chương trình viết theo thuật toán trên như sau :

Chương trình 8-5

// van_tru;

#include <conio.h>

#include <stdio.h>

Trang 21

if (i==1)

{ a[l][1]=i;

Trang 22

c[j]=1.0;

l=l+1;

} else

{ l1=l-1;

goto mot;

}}

} }

goto ba;

} else

{

Trang 23

else {

r[i]=1.0;

c[a[k][2]]=0.0;

goto sau;

}}

}k2=m-1;

if (s==1) {

for (j=1;j<=k3;j++)

if (a[j][2]==c1)

{ r1=a[j][1];

Trang 24

z[k][1]=r1; z[k][2]=c1; k=k+1; goto bon;}

k=k-1;

}else {

for (j=1;j<=k2;j++)

if (p[j][1]==r1)

{ c1=p[j][2]; s=1;

z[k][1]=r1; z[k][2]=c1; k=k+1; goto bon;}

else

continue;k=k-1;

} }

for (i=1;i<=n;i++) {

r[i]=0.0;c[i]=0.0;

Trang 25

p[i][2]=0;

}for (i=1;i<=l;i++) c[a[i][2]]=1.0;

for (i=1;i<=n;i++) for (j=1;j<=n;j++)

{

if ((r[i]!=0.0)||(c[j]!=0.0))

if ((r[i]!=1.0)||(c[j]!=1.0)) continue;

else x[i][j]=x[i][j]+m1;

else

x[i][j]=x[i][j]-m1;

}goto hai;

} }

else {

for (i=1;i<=l;i++)

if ((a[i][1]==z[k5+1][1]))

if ((a[i][2]==z[k5+1][2])) break;

a[i][1]=z[k5][1];

Trang 26

goto nam;

} }

Ngày đăng: 01/10/2012, 15:33

HÌNH ẢNH LIÊN QUAN

Theo hình vẽ,khi chọn điểm trung gia nc ta có: l1 + l2 = l0(1) và để tiện tính toán ta chọn : - Tài liệu về tối ưu hóa - phương pháp tính
heo hình vẽ,khi chọn điểm trung gia nc ta có: l1 + l2 = l0(1) và để tiện tính toán ta chọn : (Trang 1)
1. Nếu,như trường hợp hình a, f(x1) &gt; f(x2) thì giá trị cực trị của hàm nằm trong [x2, b] và x2 trở thành a và ta tính tiếp. - Tài liệu về tối ưu hóa - phương pháp tính
1. Nếu,như trường hợp hình a, f(x1) &gt; f(x2) thì giá trị cực trị của hàm nằm trong [x2, b] và x2 trở thành a và ta tính tiếp (Trang 2)
Ví dụ: Cần vận chuyển 6 thùng hàng tới 6 địa điểm với giá thành cho ở bảng - Tài liệu về tối ưu hóa - phương pháp tính
d ụ: Cần vận chuyển 6 thùng hàng tới 6 địa điểm với giá thành cho ở bảng (Trang 18)

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w