Professional Documents
Culture Documents
Bài tập TNC final 2
Bài tập TNC final 2
b. Đồ thị
x
Bài tập: Converging f(x) = 2 with [a;b] = [ -0.6; 0.75] and ε =10−4
1+ x
%ham.m
function f = ham(x)
f =x/(1+x^2);
end
%hamgrad.m
function fgrad = hamgrad(x)
fgrad = (1-(x^2))/((1+x^2)^2);
end
%searching_alpha.m
a = -0.6; b= 0.75; e = 10^(-4);
m = (a+b)/2;
while 1
if a-b<0.001
break;
else
if hamgrad(m) == 0
break;
elseif ham(m)*ham(a) < 0
b= m;
elseif ham(m)*ham(b) < 0
a= m;
end
end
end
%main.m
clear; clc;
a= -2:0.001:5;
b = a/(1+a.^2);
for k = 1:1:10000
x(1)= 5;
y(1) = 5/26;
x(k+1)= x(k) + 0.075;
y(k+1) = x(k+1)/(1+x(k+1)^2);
plot(x,y);
end
Bài 1:
1. Code Matlab
% Định nghĩa hàm mục tiêu
fun = @(x) x(1) - x(2) + 2*x(1)^2 + x(2)^2;
% Sử dụng gradient descent với quy tắc Armijo để tối ưu hóa hàm mục tiêu
max_iterations = 1000;
tolerance = 1e-6;
x = x0;
for iteration = 1:max_iterations
gradient = gradient_fun(x);
step_size = 1; % Kích thước bước ban đầu
while fun(x - step_size * gradient) > fun(x) - alpha * step_size
*norm(gradient)^2
step_size = step_size * beta; % Điều chỉnh kích thước bước theo quy
tắc Armijo
end
x = x - step_size * gradient;
% In kết quả
fprintf('Giá trị tối ưu của x là: %f\n', x(1));
fprintf('Giá trị tối ưu của y là: %f\n', x(2));
fprintf('Giá trị tối ưu của hàm mục tiêu là: %f\n', fun(x));
2. Kết quả
Bài 2.
1. Code Matlab
% Định nghĩa hàm mục tiêu
fun = @(x) x(1)^3 - 3*x(1)*x(2) + x(2)^3;
% Sử dụng gradient descent với quy tắc Armijo để tối ưu hóa hàm mục tiêu
max_iterations = 1000;
tolerance = 1e-6;
x = x0;
for iteration = 1:max_iterations
gradient = gradient_fun(x);
step_size = 1; % Kích thước bước ban đầu
while fun(x - step_size * gradient) > fun(x) - alpha * step_size *
norm(gradient)^2
step_size = step_size * beta; % Điều chỉnh kích thước bước theo quy tắc
Armijo
end
x = x - step_size * gradient;
% In kết quả
fprintf('Giá trị tối ưu của x là: %f\n', x(1));
fprintf('Giá trị tối ưu của y là: %f\n', x(2));
fprintf('Giá trị tối ưu của hàm mục tiêu là: %f\n', fun(x));
2. Kết quả
Bài 3
1. Code Matlab
clear;clc;
% Định nghĩa hàm mục tiêu
fun = @(x) x^3 - 6*x^2 + 9*x - 8;
% Sử dụng gradient descent với quy tắc Armijo để tối ưu hóa hàm mục tiêu
max_iterations = 1000;
tolerance = 1e-6;
x = x0;
for iteration = 1:max_iterations
gradient = gradient_fun(x);
step_size = 1; % Kích thước bước ban đầu
while fun(x - step_size * gradient) > fun(x) - alpha * step_size * gradient^2
step_size = step_size * beta; % Điều chỉnh kích thước bước theo quy tắc
Armijo
end
x = x - step_size * gradient;
% In kết quả
fprintf('Giá trị tối ưu của x là: %f\n', x);
fprintf('Giá trị tối ưu của hàm mục tiêu là: %f\n', fun(x));
2. Kết quả
Bài 4
1. Code Matlab
clear; clc;
% Hàm mục tiêu
fun = @(x) (x - 2)^2 + cos(x);
% Gradient của hàm mục tiêu
gradient_fun = @(x) 2*(x - 2) - sin(x);
% Sử dụng gradient descent với quy tắc Armijo để tối ưu hóa hàm mục tiêu
max_iterations = 1000;
tolerance = 1e-6;
x = x0;
for iteration = 1:max_iterations
gradient = gradient_fun(x);
step_size = 1; % Kích thước bước ban đầu
while fun(x - step_size * gradient) > fun(x) - alpha * step_size * gradient^2
step_size = step_size * beta; % Điều chỉnh kích thước bước theo quy tắc
Armijo
end
x = x - step_size * gradient;
% In kết quả
fprintf('Giá trị tối ưu của x là: %f\n', x);
fprintf('Giá trị tối ưu của hàm mục tiêu là: %f\n', fun(x));
2. Kết quả
Bài 5
1. Code Matlab
Clear; clc;
% hàm mục tiêu
fun = @(x) exp(x) - 3*x^2;
% Sử dụng gradient descent với quy tắc Armijo để tối ưu hóa hàm mục tiêu
max_iterations = 1000;
tolerance = 1e-6;
x = x0;
for iteration = 1:max_iterations
gradient = gradient_fun(x);
step_size = 1; % Kích thước bước ban đầu
while fun(x - step_size * gradient) > fun(x) - alpha * step_size * gradient^2
step_size = step_size * beta; % Điều chỉnh kích thước bước theo quy tắc
Armijo
end
x = x - step_size * gradient;
% In kết quả
fprintf('Giá trị tối ưu của x là: %f\n', x);
fprintf('Giá trị tối ưu của hàm mục tiêu là: %f\n', fun(x));
2. Kết quả
Bài 6
1. Code Matlab
clear;clc;
% Hàm mục tiêu
fun = @(x) 2*x(1)*x(2) + 2*x(1) - x(1)^2 - 2*x(2)^2;
% Gradient của hàm mục tiêu
gradient_fun = @(x) [2*x(2) + 2 - 2*x(1); 2*x(1) - 4*x(2)];
% Điểm bắt đầu
x0 = [0; 0]; % Chọn một điểm bất kỳ làm điểm bắt đầu
% Tham số của quy tắc Armijo
alpha = 0.1; % Hệ số giảm tỷ lệ (0 < alpha < 1)
beta = 0.5; % Hệ số giảm tỷ lệ (0 < beta < 1)
% Sử dụng gradient descent với quy tắc Armijo để tối ưu hóa hàm mục tiêu
max_iterations = 1000;
tolerance = 1e-6;
x = x0;
for iteration = 1:max_iterations
gradient = gradient_fun(x);
step_size = 1; % Kích thước bước ban đầu
while fun(x - step_size * gradient) > fun(x) - alpha * step_size *
norm(gradient)^2
step_size = step_size * beta; % Điều chỉnh kích thước bước theo quy tắc
Armijo
end
x = x - step_size * gradient;
% Kiểm tra điều kiện dừng
if norm(gradient) < tolerance
break;
end
end
% In kết quả
fprintf('Gia tri toi uu cua x la: %f\n', x(1));
fprintf('Gia tri toi uu cua y la: %f\n', x(2));
fprintf('Gia tri toi uu cua ham muc tieu la: %f\n', fun(x));
2. Kết quả
Bài 7
1. Code Matlab
clear; clc;
% Hàm mục tiêu
fun = @(x) x(1) * x(2)^2;
% Gradient của hàm mục tiêu
gradient_fun = @(x) [x(2)^2; 2 * x(1) * x(2)];
% Điểm bắt đầu
x0 = [0.5; 0.25]; % Chọn một điểm bất kỳ làm điểm bắt đầu
% Tham số của quy tắc Armijo
alpha = 0.1; % Hệ số giảm tỷ lệ (0 < alpha < 1)
beta = 0.5; % Hệ số giảm tỷ lệ (0 < beta < 1)
% Sử dụng gradient descent với quy tắc Armijo để tối ưu hóa hàm mục tiêu
max_iterations = 1000;
tolerance = 1e-6;
x = x0;
for iteration = 1:max_iterations
gradient = gradient_fun(x);
step_size = 1; % Kích thước bước ban đầu
while fun(x - step_size * gradient) > fun(x) - alpha * step_size *
norm(gradient)^2
step_size = step_size * beta; % Điều chỉnh kích thước bước theo quy tắc
Armijo
end
x = x - step_size * gradient;
% Kiểm tra điều kiện dừng
if norm(gradient) < tolerance
break;
end
end
% In kết quả
fprintf('Giá trị tối ưu của x là: %f\n', x(1));
fprintf('Giá trị tối ưu của y là: %f\n', x(2));
fprintf('Giá trị tối ưu của hàm mục tiêu là: %f\n', fun(x));
2. Kết quả
Bài 1:
1. Code:
% Dinh nghia ham muc tieu
f = @(x)(x(1) - 4)^4 + (x(2) - 3)^2 + 4*(x(3) + 5)^4;
% In ket qua
disp('gia tri nho nhat cua ham muc tieu:');
disp(fval);
disp('Gia tri x tuong ung:');
disp(x_min);
2. Kết quả :
Bài 2:
1. Code:
% Dinh nghia ham muc tieu f(x)
fun = @(x) 100*(x(1)^2 - x(2)^2)^2 + (x(1) - 1)^2;
2. Kết quả :
Bài 3:
1. Code:
% Dinh nghia ham muc tieu f(x) va dao ham bac nhat f'(x)
fun = @(x) 0.5 * x^2 - sin(x);
df = @(x) x - cos(x);
2. Kết quả :
Bài 4:
1. Code:
% Dinh nghia ham muc tieu f(x) va dao ham bac nhat f'(x)
fun = @(x) 0.5 * x^2 - sin(x);
df = @(x) x - cos(x);
2 Kết quả :
Bài 5:
1 Code matlab :
% Hàm và ??o hàm
f = @(x) x + x.^(4/3);
df = @(x) 1 + (4/3)*x.^(1/3);
% S? l?n l?p
max_iter = 1000;
2 Kết quả :
Bài 6:
1. Code:
% Dinh nghia ham muc tieu f(x)
fun = @(x) x^3 - 12*x^2 + 7*x^4 + 5*x + 42;
Bài 7:
min f(x) = e x −3 x
function x_min = newton_minimization5(f, x0, epsilon)
% Đạo hàm bậc 1
f_1 = @(x) exp(x) - 3;
x = x0;
while true
x_new = x - f_1(x) / f_2(x);
x = x_new;
end
x_min = x;
end
Chương trình:
clc;
clear;
% Ngưỡng dừng
epsilon = 1e-6;
% Kết quả
min_value = f(x_min);
min_point = x_min;
disp('Giá trị nhỏ nhất của hàm mục tiêu:');
disp(min_value);
disp('Điểm tới hạn:');
disp(min_point);
bài 8: f(x) = 2
x
[ ]
1 T 4 2
2 2
x−x
T −1
1 [ ] ( ) T
với x 0 =[ 0 , 0 ] và H 0 =I 2
% Ma trận xấp xỉ đạo hàm bậc hai ban đầu (chọn ma trận đơn
vị)
H = eye(2);
% Ngưỡng dừng
epsilon = 1e-6;
% Tìm kiếm tối ưu trên đường thẳng bằng cách chọn alpha
alpha = 1; % Chọn alpha cố định, bạn có thể sử dụng các
phương pháp tìm kiếm dòng để tối ưu hóa alpha
x_new = x + alpha * d;
% Tính a
a = alpha * d;
% Tính b
b = g_new - g;
% Cập nhật ma trận xấp xỉ đạo hàm bậc hai B theo công
thức Quasi-Newton (BFGS)
H = H + ((b - H*a) * (b - H*a)') / ((b - H*a)' * a);
vonglap = vonglap + 1;
end
% Kết quả
min_value = f(x);
min_point = x;
disp('Giá trị nhỏ nhất của hàm mục tiêu:');
disp(min_value);
disp('Điểm tối ưu:');
disp(min_point);
Bài tập: fminunc và fminsearch:
bài 1: min f(x) = 3 x 21+ 2 x 1 x 2 + x 22−4 x1 +5 x 2
clc; clear
fun = @(x)3*x(1)^2+2*x(1)*x(2)+x(2)^2-4*x(1)+5*x(2);
x0 = [1,1];
option = optimset('Display','iter','PlotFcns',@optimplotfval);
[x,fval] = fminunc(fun,x0,option)
title('');
Kết quả:
2
2 ¿ |x|∨¿2
−¿|x|∨¿2+ ¿¿
Bài 3: f(x) = x e 20
1
Code:
% Initial guess
x0 = [1; 1];
% Newton's method
for iter = 1:max_iter
% Evaluate objective function and its derivatives
f_val = fun(x0);
grad_f = grad(x0);
% Newton's method
for iter = 1:max_iter
% Evaluate objective and constraint functions and their derivatives
f_val = fun(x0);
g_val = constraint(x0);
grad_f = grad(x0);
grad_g = constraint_grad(x0);
min
Bài 2: x , y √ xy
% Ràng bu?c
A = [20, 10];
b = 200;
% Tính toán
options = optimoptions('fmincon', 'Display', 'iter',
'Algorithm', 'sqp');
[x, fval] = fmincon(objective, x0, A, b, [], [], [0; 0], [],
[], options);
Kết quả:
min x + y + z
Bài 3:
x,y,z
St: x 2+ y 2+ z 2=1
Code:
% Define the objective function and its derivatives
fun = @(x) -(x(1) + x(2) + x(3));
grad = @(x) [-1; -1; -1];
% Define the constraint function and its derivatives
constraint = @(x) x(1)^2 + x(2)^2 + x(3)^2 - 1;
constraint_grad = @(x) [2*x(1); 2*x(2); 2*x(3)];
% Initial guess
x0 = [1; 0; 0];
% Hệ số ràng buộc
A=[
2 1 1 0;
0 3 1 -1;
4 0 1 0;
1101
];
% Hệ số ràng buộc
A=[
1/30 1/40;
1/30 1/25;
1/28 1/35
];
Bài 3: Min 3 x 1+ 2 x 2
St x 1≤12
x 1+ 3 x 2≤ 45
2 x 1+ x2 ≤ 30
x 1 , x 2≥0
Code matlab
% Hệ số hàm mục tiêu
f = [3; 2];
% Hệ số ràng buộc
A=[
1 0;
1 3;
21
];
Bài 4:
Max 5x+12y
s.t 20x+10y ≤ 200
10x+20y ≤ 120
10x+30y ≤ 150
x≥0, y≥ 0
code matlab
% Hệ số hàm mục tiêu
f = [-5; -12];
% Hệ số ràng buộc
A=[
20 10;
10 20;
10 30
];
Code matlab
% Hệ số hàm mục tiêu
f = [3; 2];
% Hệ số ràng buộc
A=[
1 0;
1 3;
02
];
Bài 2
Chọn bài tập 3 và 4 để vẽ hàm mục tiêu, vẽ hàm ràng buộc trong cùng figure:
2 2
*min f(x) = (x 1−4) + (x 2−6)
2
st: x1 ≤ x2
x 2 ≤4
2 2
*min (x 1−3) + (x 2−2)
2 2
st: x 1 +¿ x 2 ≤ 5
x 1+ x2 ≤3
x 1, x 2 ≥ 0
2 2
Bài 3 min f(x) = (x 1−4) + (x 2−6)
2
st: x1 ≤ x2
x 2 ≤4
2 2
Bài 4 min (x 1−3) + (x 2−2)
2 2
st: x 1 +¿ x 2 ≤ 5
x 1+ x2 ≤3
x 1, x 2 ≥ 0
Bài 5:
2 2
minf(x)= x 1+ x2
st −x 1−x 2+ 4 ≤ 0
−2 x 1−x 2+5 ≤ 0
fun = @(x) x(1)^2 + x(2)^2;
x0 = [0, 0];
A = [-1, -1; -2, -1];
b = [-4; -5];
Aeq = [];
beq = [];
lb = [];
ub = [];
x = fmincon(fun, x0, A, b, Aeq, beq, lb, ub);
disp('x=');
disp(x);
Bài 6:
2 2
minf(x)= x 1+ x2
2 2
st x .1 + x 2 ≤ 5
x 1+ 2 x 2=4
x1 ≥ 0 , x2 ≥ 0
fun = @(x) x(1)^2 + x(2)^2;
x0 = [0, 0];
Aeq = [1, 2];
beq = 4;
A = [];
b = [];
nonlcon = @circlecon;
lb = [0, 0];
ub = [];
options = optimoptions('fmincon', 'Display', 'iter', 'Algorithm', 'sqp');
x = fmincon(fun, x0, A, b, Aeq, beq, lb, ub, nonlcon, options);
disp('Optimal solution:');
disp(x);
disp('Objective function value at the optimal solution:');
disp(fun(x));
function [c, ceq] = circlecon(x)
c = x(1)^2 + x(2)^2 - 5;
ceq = [];
end
x 1−1 2 2
Bài 7: minf(x)= 2 ⅇ + ( x 2−x 1 ) + x 3
St x 1 x 2 x 3 ≤1
x 1+ x3 > c
x≥0
% Hàm mục tiêu
fun = @(x) 2 * exp(x(1) - 1) + (x(2) - x(1))^2 + x(3)^2;
x0 = [0, 0, 0];
A = [-1, 0, 0; 0, -1, 0; 0, 0, -1];
b = [-1; -1; -1];
Aeq = [1, 0, 1];
beq = 0;
nonlcon = @customConstraint;
lb = [0, 0, 0];
ub = [1, 1, 1];
options = optimoptions('fmincon', 'Display', 'iter', 'Algorithm', 'sqp');
x = fmincon(fun, x0, A, b, Aeq, beq, lb, ub, nonlcon, options);
disp('Optimal solution:');
disp(x);
disp('Objective function value at the optimal solution:');
disp(fun(x));
function [c, ceq] = customConstraint(x)
c = x(1) + x(2) + x(3) - 1;
ceq = [];
end
x 1+ 3 x 2 +3
Bài 8: min f ( x )=
2 x 1+ x 2 +6
2 x1 + x 2−12 ≤ 0
−x 1+ 2 x 2−4 ≤ 0
x1 , x2 ≥ 0
x0 = [0, 0];
b = [12; 4];
Aeq = [];
beq = [];
lb = [0, 0];
ub = [];
disp('Optimal solution:');
disp(x);
disp(fun(x));
Bài 9:
min x 1
2 2
( x 1−1 ) + ( x 2−1 ) ≤ 1
2 2
( x 1−1 ) + ( x 2 +1 ) ≤1
fun = @(x) x(1);
x0 = [0, 0];
nonlcon = @(x) [
(x(1)-1)^2 + (x(2)-1)^2 - 1;
(x(1)-1)^2 + (x(2)+1)^2 - 1
];
Aeq = [];
beq = [];
lb = [];
ub = [];
[x, fval] = fmincon(fun, x0, [], [], Aeq, beq, lb, ub, nonlcon, options);
disp('Optimal solution:');
disp(x);
disp(fval);