Cho biết hàm lượng các chất dinh dưỡng trên có trong 1g thức ăn A, B, C và giá mua 1kg thức ăn cho mỗi loại được cho trong bảng sau: Bài toán đặt ra là xác định khối lượng thức ăn mỗi lo
Trang 1Câu 1: ( 3 điểm )
Giả sử nhu cầu tối thiểu mỗi ngày về các chất dinh dưỡng đạm, đường, khoáng cho một loại gia súc tương ứng là 90g, 130g, 10g Cho biết hàm lượng các chất dinh dưỡng trên có trong 1g thức ăn A, B, C và giá mua 1kg thức ăn cho mỗi loại được cho trong bảng sau:
Bài toán đặt ra là xác định khối lượng thức ăn mỗi loại cần mua để tổng số tiền chi cho việc mua thức ăn là ít nhất nhưng vẫn đáp ứng được nhu cầu dinh dưỡng mỗi ngày
1 Hãy lập mô hình tối ưu của bài toán trên theo dạng dưới đây, bằng cách chỉ ra hàm mục tiêu , ma trận và vector
2 Sử dụng scipy.optimize.lineprog để giải bài toán trên
3 Sử dụng cvxpy để giải bài toán trên
import numpy as np
import cvxpy as cp
x = cp.Variable()
y = cp.Variable()
z = cp.Variable()
z1 = cp.Minimize(3000*x + 4000*y + 5000* )
rangbuoc = [0.1*x + 0.2*y + 0.3*z >= 0.09,
0.3*x + 0.4*y + 0.2*z >= 0.13,
0.02*x + 0.01*y + 0.03*z >= 0.01,
x >= ,
y >= ,
z >= ]
prob = cp.Problem(z1 , rangbuoc)
res = prob.solve()
print('gia tri cua cac thuoc tinh ' res)
print('cac gia tri x , y , z' x.value , y.value , z.value)
Đạ m 0.1 kg 0.2 kg 0.3 kg Đườ ng 0.3 kg 0.4 kg 0.2 kg Khoáng 0.02 kg 0.01 kg 0.03 kg Giá mua (VND) 3000 4000 5000
minimize f0(x), subject to Ax ≤ b.
(2) (3)
In [12]:
Trang 2gia tri cua cac thuoc tinh 1819.9999996744896
cac gia tri x , y , z 0.19333333339993602 0.0933333331975349 0.17333333333690842
import numpy as np
from scipy.optimize import linprog
import cvxpy as cp
# 1 Định nghĩa các hệ số của hàm mục tiêu
c = np.array([3000, 4000, 5000])
# 2 Định nghĩa các hệ số của các ràng buộc bất đẳng thức
A = np.array([
[ 0.1, -0.2, -0.3], # Đạm
[ 0.3, -0.4, -0.2], # Đường
[ 0.02, -0.01, -0.03] # Khoáng
])
b = np.array([-90, -130, -10])
# 3 Định nghĩa các giới hạn cho các biến
x0_bounds = ( , None)
x1_bounds = ( , None)
x2_bounds = ( , None)
# Giải quyết vấn đề lập trình tuyến tính bằng scipy.optimize.lineprog
res_scipy = linprog( , A_ub= , b_ub= , bounds= x0_bounds, x1_bounds, x2_bounds))
print("Giá trị tối ưu (scipy):", res_scipy.fun)
print("Khối lượng thức ăn mỗi loại (scipy):", res_scipy )
# Giải quyết vấn đề lập trình tuyến tính bằng cvxpy
x = cp.Variable( )
objective = cp.Minimize(c @ x)
constraints = [A @ x <= b, x >= ]
prob = cp.Problem(objective, constraints)
prob.solve()
print("Giá trị tối ưu (cvxpy):", prob.value)
print("Khối lượng thức ăn mỗi loại (cvxpy):", x.value)
Giá trị tối ưu (scipy): 1820000.0000000002
Khối lượng thức ăn mỗi loại (scipy): [193.33333333 93.33333333 173.33333333] Giá trị tối ưu (cvxpy): 1819999.9982757156
Khối lượng thức ăn mỗi loại (cvxpy): [193.33333355 93.33333295 173.33333316]
Câu 2: (4 điểm)
1 Hãy giải thích cơ bản về thuật toán Gradient Descent và nó được sử dụng trong lĩnh vực nào trong học máy
này
3 Sử dụng thuật toán Gradient Descent, hãy tìm giá trị của x để tối ưu hóa hàm số
với giá trị ban đầu = 3, dùng learning rate là 0.1 và thực hiện tối đa 100 vòng lặp In ra giá trị của x và f(x) tương ứng sau mỗi vòng lặp
In [13]:
f(x) = ex+ x2− log(1 + x2)
f(x) = ex+ x2− log(1 + x2) x(0)
Trang 34 Bằng cách thay đổi giá trị x^(0) và learning rate trong thuật toán trên, hãy đưa ra những trở ngại có thể gặp khi áp dụng Gradient Descent và cách giải quyết chúng
# 1 Giải thích cơ bản về thuật toán Gradient Descent và nó được sử dụng trong lĩnh
# - Gradient Descent là một thuật toán tối ưu hóa được sử dụng rộng rãi trong họ
#
# 2 Tính đạo hàm của hàm số mục tiêu $f(x) = e^x + x^2 - log(1 + x^2)$.
# - Đạo hàm của hàm số mục tiêu là $f'(x) = e^x + 2x - \frac{2x}{1 + x^2}$.
#
# 3 Sử dụng thuật toán Gradient Descent, tìm giá trị của x để tối ưu hóa hàm số $f
# - Code sử dụng thuật toán Gradient Descent và in ra giá trị của x và f(x) sau
import matplotlib.pyplot as plt
x = 3
learning_rate = 0.1
max_iterations = 100
values_x = []
values_f = []
for i in range(max_iterations):
gradient = np.exp( ) + 2 x - 2 x ( x**2
x = x - learning_rate * gradient
values_x.append( )
values_f.append(np.exp( ) + x**2 - np.log( x**2))
print("Giá trị của x sau vòng lặp thứ", i+ , "là:", x)
print("Giá trị của f(x) sau vòng lặp thứ", i+ , "là:", np.exp( ) + x**2 - np.lo
plt.plot(values_x, label='Giá trị của x')
plt.plot(values_f, label='Giá trị của f(x)')
plt.xlabel('Số vòng lặp')
plt.ylabel('Giá trị')
plt.legend()
plt.show()
# 4 Bằng cách thay đổi giá trị x^(0) và learning rate trong thuật toán trên, hãy đ
# - Trở ngại có thể gặp phải khi áp dụng Gradient Descent là overshooting (quá m
In [14]:
Trang 4Giá trị của x sau vòng lặp thứ 1 là: 0.45144630768123317 Giá trị của f(x) sau vòng lặp thứ 1 là: 1.5888995064510838 Giá trị của x sau vòng lặp thứ 2 là: 0.2791021425488175 Giá trị của f(x) sau vòng lặp thứ 2 là: 1.324827515623991 Giá trị của x sau vòng lặp thứ 3 là: 0.14287385097893918 Giá trị của f(x) sau vòng lặp thứ 3 là: 1.1537898203998547 Giá trị của x sau vòng lặp thứ 4 là: 0.026943797664924163 Giá trị của f(x) sau vòng lặp thứ 4 là: 1.0273103273040076 Giá trị của x sau vòng lặp thứ 5 là: -0.07579111795698662 Giá trị của f(x) sau vòng lặp thứ 5 là: 0.9270262575867041 Giá trị của x sau vòng lặp thứ 6 là: -0.16840552419286972 Giá trị của f(x) sau vòng lặp thứ 6 là: 0.8454058040699831 Giá trị của x sau vòng lặp thứ 7 là: -0.25197776623478646 Giá trị của f(x) sau vòng lặp thứ 7 là: 0.7791962334837578 Giá trị của x sau vòng lặp thứ 8 là: -0.3266952458425544 Giá trị của f(x) sau vòng lặp thứ 8 là: 0.7266237873818961 Giá trị của x sau vòng lặp thứ 9 là: -0.39252449200604334 Giá trị của f(x) sau vòng lặp thứ 9 là: 0.6861257118286008 Giá trị của x sau vòng lặp thứ 10 là: -0.4495786332178795 Giá trị của f(x) sau vòng lặp thứ 10 là: 0.6559303781173476 Giá trị của x sau vòng lặp thứ 11 là: -0.4982501657024585 Giá trị của f(x) sau vòng lặp thứ 11 là: 0.6341009884888243 Giá trị của x sau vòng lặp thứ 12 là: -0.5391910088577767 Giá trị của f(x) sau vòng lặp thứ 12 là: 0.6187412431668089 Giá trị của x sau vòng lặp thứ 13 là: -0.5732232190477371 Giá trị của f(x) sau vòng lặp thứ 13 là: 0.6081760598283259 Giá trị của x sau vòng lặp thứ 14 là: -0.601239926408117 Giá trị của f(x) sau vòng lặp thứ 14 là: 0.6010417372231175 Giá trị của x sau vòng lặp thứ 15 là: -0.6241260069660454 Giá trị của f(x) sau vòng lặp thứ 15 là: 0.5962948047142258 Giá trị của x sau vòng lặp thứ 16 là: -0.6427062170186431 Giá trị của f(x) sau vòng lặp thứ 16 là: 0.5931731175306048 Giá trị của x sau vòng lặp thứ 17 là: -0.6577175714841815 Giá trị của f(x) sau vòng lặp thứ 17 là: 0.5911390890190469 Giá trị của x sau vòng lặp thứ 18 là: -0.6697993031731598 Giá trị của f(x) sau vòng lặp thứ 18 là: 0.5898233468501652 Giá trị của x sau vòng lặp thứ 19 là: -0.6794939828206394 Giá trị của f(x) sau vòng lặp thứ 19 là: 0.5889770856006449 Giá trị của x sau vòng lặp thứ 20 là: -0.6872548709267774 Giá trị của f(x) sau vòng lặp thứ 20 là: 0.5884352255754141 Giá trị của x sau vòng lặp thứ 21 là: -0.693456154552492 Giá trị của f(x) sau vòng lặp thứ 21 là: 0.5880894982475444 Giá trị của x sau vòng lặp thứ 22 là: -0.6984039910020016 Giá trị của f(x) sau vòng lặp thứ 22 là: 0.5878695250712198 Giá trị của x sau vòng lặp thứ 23 là: -0.7023471757538614 Giá trị của f(x) sau vòng lặp thứ 23 là: 0.5877298719300186 Giá trị của x sau vòng lặp thứ 24 là: -0.7054868359152989 Giá trị của f(x) sau vòng lặp thứ 24 là: 0.5876413649447729 Giá trị của x sau vòng lặp thứ 25 là: -0.7079849084245005 Giá trị của f(x) sau vòng lặp thứ 25 là: 0.5875853494241959 Giá trị của x sau vòng lặp thứ 26 là: -0.7099713684829002 Giá trị của f(x) sau vòng lặp thứ 26 là: 0.5875499360076428 Giá trị của x sau vòng lặp thứ 27 là: -0.7115502833613798 Giá trị của f(x) sau vòng lặp thứ 27 là: 0.5875275666122655 Giá trị của x sau vòng lặp thứ 28 là: -0.7128048175262239 Giá trị của f(x) sau vòng lặp thứ 28 là: 0.5875134462673268
Trang 5Giá trị của x sau vòng lặp thứ 29 là: -0.7138013315651043 Giá trị của f(x) sau vòng lặp thứ 29 là: 0.5875045378118684 Giá trị của x sau vòng lặp thứ 30 là: -0.7145927151105722 Giá trị của f(x) sau vòng lặp thứ 30 là: 0.5874989199100938 Giá trị của x sau vòng lặp thứ 31 là: -0.7152210822559307 Giá trị của f(x) sau vòng lặp thứ 31 là: 0.5874953783147238 Giá trị của x sau vòng lặp thứ 32 là: -0.7157199423574507 Giá trị của f(x) sau vòng lặp thứ 32 là: 0.5874931462475521 Giá trị của x sau vòng lặp thứ 33 là: -0.7161159427219055 Giá trị của f(x) sau vòng lặp thứ 33 là: 0.5874917398010393 Giá trị của x sau vòng lặp thứ 34 là: -0.7164302641223902 Giá trị của f(x) sau vòng lặp thứ 34 là: 0.5874908537353124 Giá trị của x sau vòng lặp thứ 35 là: -0.716679736129893 Giá trị của f(x) sau vòng lặp thứ 35 là: 0.5874902955857784 Giá trị của x sau vòng lặp thứ 36 là: -0.7168777271556432 Giá trị của f(x) sau vòng lặp thứ 36 là: 0.5874899440341462 Giá trị của x sau vòng lặp thứ 37 là: -0.7170348538606736 Giá trị của f(x) sau vòng lặp thứ 37 là: 0.5874897226272615 Giá trị của x sau vòng lặp thứ 38 là: -0.7171595460588687 Giá trị của f(x) sau vòng lặp thứ 38 là: 0.5874895831947246 Giá trị của x sau vòng lặp thứ 39 là: -0.7172584962151928 Giá trị của f(x) sau vòng lặp thứ 39 là: 0.5874894953907581 Giá trị của x sau vòng lặp thứ 40 là: -0.7173370169054935 Giá trị của f(x) sau vòng lặp thứ 40 là: 0.587489440100847 Giá trị của x sau vòng lặp thứ 41 là: -0.7173993249517152 Giá trị của f(x) sau vòng lặp thứ 41 là: 0.5874894052861059 Giá trị của x sau vòng lặp thứ 42 là: -0.7174487671905445 Giá trị của f(x) sau vòng lặp thứ 42 là: 0.5874893833646718 Giá trị của x sau vòng lặp thứ 43 là: -0.7174879998129855 Giá trị của f(x) sau vòng lặp thứ 43 là: 0.5874893695619212 Giá trị của x sau vòng lặp thứ 44 là: -0.7175191307902102 Giá trị của f(x) sau vòng lặp thứ 44 là: 0.5874893608712146 Giá trị của x sau vòng lặp thứ 45 là: -0.7175438329630972 Giá trị của f(x) sau vòng lặp thứ 45 là: 0.5874893553993066 Giá trị của x sau vòng lặp thứ 46 là: -0.7175634338250774 Giá trị của f(x) sau vòng lặp thứ 46 là: 0.5874893519540787 Giá trị của x sau vòng lặp thứ 47 là: -0.7175789867934271 Giá trị của f(x) sau vòng lặp thứ 47 là: 0.5874893497849092 Giá trị của x sau vòng lặp thứ 48 là: -0.7175913277806147 Giá trị của f(x) sau vòng lặp thứ 48 là: 0.587489348419175 Giá trị của x sau vòng lặp thứ 49 là: -0.7176011200943866 Giá trị của f(x) sau vòng lặp thứ 49 là: 0.5874893475592976 Giá trị của x sau vòng lặp thứ 50 là: -0.7176088900724628 Giá trị của f(x) sau vòng lặp thứ 50 là: 0.5874893470179139 Giá trị của x sau vòng lặp thứ 51 là: -0.7176150553625301 Giá trị của f(x) sau vòng lặp thứ 51 là: 0.5874893466770568 Giá trị của x sau vòng lặp thứ 52 là: -0.7176199473646764 Giá trị của f(x) sau vòng lặp thứ 52 là: 0.5874893464624524 Giá trị của x sau vòng lặp thứ 53 là: -0.7176238290407477 Giá trị của f(x) sau vòng lặp thứ 53 là: 0.5874893463273374 Giá trị của x sau vòng lặp thứ 54 là: -0.7176269090467753 Giá trị của f(x) sau vòng lặp thứ 54 là: 0.5874893462422691 Giá trị của x sau vòng lặp thứ 55 là: -0.7176293529474124 Giá trị của f(x) sau vòng lặp thứ 55 là: 0.5874893461887102 Giá trị của x sau vòng lặp thứ 56 là: -0.717631292114745 Giá trị của f(x) sau vòng lặp thứ 56 là: 0.5874893461549897
Trang 6Giá trị của x sau vòng lặp thứ 57 là: -0.7176328307895434 Giá trị của f(x) sau vòng lặp thứ 57 là: 0.5874893461337592 Giá trị của x sau vòng lặp thứ 58 là: -0.7176340516843493 Giá trị của f(x) sau vòng lặp thứ 58 là: 0.5874893461203927 Giá trị của x sau vòng lặp thứ 59 là: -0.717635020429482 Giá trị của f(x) sau vòng lặp thứ 59 là: 0.5874893461119769 Giá trị của x sau vòng lặp thứ 60 là: -0.7176357891008901 Giá trị của f(x) sau vòng lặp thứ 60 là: 0.5874893461066786 Giá trị của x sau vòng lặp thứ 61 là: -0.7176363990194462 Giá trị của f(x) sau vòng lặp thứ 61 là: 0.5874893461033428 Giá trị của x sau vòng lặp thứ 62 là: -0.7176368829721347 Giá trị của f(x) sau vòng lặp thứ 62 là: 0.5874893461012426 Giá trị của x sau vòng lặp thứ 63 là: -0.7176372669745185 Giá trị của f(x) sau vòng lặp thứ 63 là: 0.5874893460999204 Giá trị của x sau vòng lặp thứ 64 là: -0.7176375716692163 Giá trị của f(x) sau vòng lặp thứ 64 là: 0.5874893460990877 Giá trị của x sau vòng lặp thứ 65 là: -0.7176378134355607 Giá trị của f(x) sau vòng lặp thứ 65 là: 0.5874893460985636 Giá trị của x sau vòng lặp thứ 66 là: -0.717638005270084 Giá trị của f(x) sau vòng lặp thứ 66 là: 0.5874893460982336 Giá trị của x sau vòng lặp thứ 67 là: -0.7176381574851612 Giá trị của f(x) sau vòng lặp thứ 67 là: 0.5874893460980257 Giá trị của x sau vòng lặp thứ 68 là: -0.7176382782633639 Giá trị của f(x) sau vòng lặp thứ 68 là: 0.587489346097895 Giá trị của x sau vòng lặp thứ 69 là: -0.7176383740973254 Giá trị của f(x) sau vòng lặp thứ 69 là: 0.5874893460978128 Giá trị của x sau vòng lặp thứ 70 là: -0.7176384501387616 Giá trị của f(x) sau vòng lặp thứ 70 là: 0.5874893460977608 Giá trị của x sau vòng lặp thứ 71 là: -0.7176385104754086 Giá trị của f(x) sau vòng lặp thứ 71 là: 0.5874893460977282 Giá trị của x sau vòng lặp thứ 72 là: -0.717638558350766 Giá trị của f(x) sau vòng lặp thứ 72 là: 0.5874893460977075 Giá trị của x sau vòng lặp thứ 73 là: -0.7176385963384555 Giá trị của f(x) sau vòng lặp thứ 73 là: 0.5874893460976947 Giá trị của x sau vòng lặp thứ 74 là: -0.7176386264805709 Giá trị của f(x) sau vòng lặp thứ 74 là: 0.5874893460976865 Giá trị của x sau vòng lặp thứ 75 là: -0.7176386503974536 Giá trị của f(x) sau vòng lặp thứ 75 là: 0.5874893460976813 Giá trị của x sau vòng lặp thứ 76 là: -0.7176386693747969 Giá trị của f(x) sau vòng lặp thứ 76 là: 0.5874893460976781 Giá trị của x sau vòng lặp thứ 77 là: -0.717638684432761 Giá trị của f(x) sau vòng lặp thứ 77 là: 0.5874893460976762 Giá trị của x sau vòng lặp thứ 78 là: -0.7176386963808128 Giá trị của f(x) sau vòng lặp thứ 78 là: 0.5874893460976749 Giá trị của x sau vòng lặp thứ 79 là: -0.7176387058612406 Giá trị của f(x) sau vòng lặp thứ 79 là: 0.587489346097674 Giá trị của x sau vòng lặp thứ 80 là: -0.7176387133836812 Giá trị của f(x) sau vòng lặp thứ 80 là: 0.5874893460976736 Giá trị của x sau vòng lặp thứ 81 là: -0.7176387193525167 Giá trị của f(x) sau vòng lặp thứ 81 là: 0.5874893460976732 Giá trị của x sau vòng lặp thứ 82 là: -0.7176387240886121 Giá trị của f(x) sau vòng lặp thứ 82 là: 0.5874893460976729 Giá trị của x sau vòng lặp thứ 83 là: -0.7176387278465645 Giá trị của f(x) sau vòng lặp thứ 83 là: 0.5874893460976729 Giá trị của x sau vòng lặp thứ 84 là: -0.7176387308283892 Giá trị của f(x) sau vòng lặp thứ 84 là: 0.5874893460976728
Trang 7Giá trị của x sau vòng lặp thứ 85 là: -0.7176387331943795 Giá trị của f(x) sau vòng lặp thứ 85 là: 0.5874893460976729 Giá trị của x sau vòng lặp thứ 86 là: -0.7176387350717233 Giá trị của f(x) sau vòng lặp thứ 86 là: 0.5874893460976727 Giá trị của x sau vòng lặp thứ 87 là: -0.7176387365613403 Giá trị của f(x) sau vòng lặp thứ 87 là: 0.5874893460976727 Giá trị của x sau vòng lặp thứ 88 là: -0.7176387377433076 Giá trị của f(x) sau vòng lặp thứ 88 là: 0.5874893460976727 Giá trị của x sau vòng lặp thứ 89 là: -0.7176387386811638 Giá trị của f(x) sau vòng lặp thứ 89 là: 0.5874893460976726 Giá trị của x sau vòng lặp thứ 90 là: -0.7176387394253252 Giá trị của f(x) sau vòng lặp thứ 90 là: 0.5874893460976727 Giá trị của x sau vòng lặp thứ 91 là: -0.7176387400157953 Giá trị của f(x) sau vòng lặp thứ 91 là: 0.5874893460976726 Giá trị của x sau vòng lặp thứ 92 là: -0.717638740484316 Giá trị của f(x) sau vòng lặp thứ 92 là: 0.5874893460976727 Giá trị của x sau vòng lặp thứ 93 là: -0.7176387408560734 Giá trị của f(x) sau vòng lặp thứ 93 là: 0.5874893460976727 Giá trị của x sau vòng lặp thứ 94 là: -0.717638741151052 Giá trị của f(x) sau vòng lặp thứ 94 là: 0.5874893460976727 Giá trị của x sau vòng lặp thứ 95 là: -0.7176387413851087 Giá trị của f(x) sau vòng lặp thứ 95 là: 0.5874893460976727 Giá trị của x sau vòng lặp thứ 96 là: -0.717638741570826 Giá trị của f(x) sau vòng lặp thứ 96 là: 0.5874893460976724 Giá trị của x sau vòng lặp thứ 97 là: -0.7176387417181871 Giá trị của f(x) sau vòng lặp thứ 97 là: 0.5874893460976726 Giá trị của x sau vòng lặp thứ 98 là: -0.7176387418351138 Giá trị của f(x) sau vòng lặp thứ 98 là: 0.5874893460976727 Giá trị của x sau vòng lặp thứ 99 là: -0.7176387419278917 Giá trị của f(x) sau vòng lặp thứ 99 là: 0.5874893460976726 Giá trị của x sau vòng lặp thứ 100 là: -0.7176387420015082 Giá trị của f(x) sau vòng lặp thứ 100 là: 0.5874893460976728
Trang 8Câu 3: (3 điểm)
Xét bài toán tối ưu sau:
1 Hãy tìm giá trị tối ưu của bài toán (1)
2 Sử dụng thuật toán Gradient Descent cho bài toán (1) với learning rate được tính theo phương pháp exact line search và điểm khởi tạo = (1, 0), hãy tìm công thức cho điểm cập nhật
3 Hãy vẽ đồ thị biểu thị cho sai số = Từ đó anh/chị rút ra được kết luận gì?
import numpy as np
# Phần 1: Tìm giá trị tối ưu p* của bài toán (1)
def f( ):
return 0.5 x[ ]**2 + 0.5 x[ ]**2 + 2 x 1
def grad_f( ):
return np.array([x 0], x[ ] + 2])
min
x=(x1,x2 )∈R2f(x) = x2
1+ x2
2+ 2x2(1) (4)
1 2
1 2
p∗
x(0)
x(k)
errk |f(x(k)) − p∗|
In [15]:
Trang 9x_opt = np.array([0 2]) # Giá trị tối ưu
p_opt = f(x_opt) # Giá trị tối ưu của hàm số
# Phần 2: Sử dụng thuật toán Gradient Descent cho bài toán (1) với learning rate đư
def gradient_descent(x0, max_iter=1000, tol=1e-6):
x = x0
x_history = [ ]
f_history = [ ( )]
for _ in range(max_iter):
grad = grad_f( )
alpha = 1 / ( np.linalg.norm(grad)) # Learning rate được tính theo phươ
x = x - alpha * grad
x_history.append( )
f_history.append( ( ))
if np.linalg.norm(grad) < tol:
break
return x, x_history, f_history
x0 = np.array([1 ]) # Điểm khởi tạo
x_opt_gd, x_history, f_history = gradient_descent(x0)
# Phần 3: Vẽ đồ thị biểu thị cho sai số err_k = |f(x^(k)) - p*|
import matplotlib.pyplot as plt
err_history = [abs(f_x - p_opt) for f_x in f_history]
plt.plot(err_history)
plt.xlabel('Số vòng lặp')
plt.ylabel('Sai số')
plt.title('Đồ thị biểu thị cho sai số err_k')
plt.show()
# Kết luận: Từ đồ thị biểu thị cho sai số err_k, ta có thể thấy rằng sau mỗi vòng l
Trang 10Câu 1: ( 3 điểm )
Một cơ sở sản xuất đồ gỗ dự định sản xuất ba loại sản phẩm là bàn, ghế và tủ Định mức sử dụng lao động, chi phí sản xuất và giá bán mỗi sản phẩm mỗi loại ước tính trong bảng sau:
Các yếu tố Bàn Ghế Tủ
Lao động (ngày công) 2 1 3 Chi phí sản xuất (ngàn đồng) 100 40 250 Giá bán (ngàn đồng) 260 120 600 Bài toán đặt ra là xác định số sản phẩm mỗi loại cần phải sản xuất sao cho không bị động trong sản xuất và tổng doanh thu đạt được cao nhất, biết rằng cơ sở có số lao động tương đương với 500 ngày công, số tiền dành cho chi phí sản xuất là 40 triệu đồng và số bàn, ghế phải theo tỉ lệ 1/6