* S_CUA_SO_1_2 - 280 * X_CUA_SO_1_2 - O_CUA_SO_1_3 - 10 * S_CUA_SO_1_3 - 644 * X_CUA_SO_1_3 - O_CUA_SO_2_2 - 10 * S_CUA_SO_2_2 - 168 * X_CUA_SO_2_2 - X_CUA_SO_1_3 - O_CUA_SO_2_2 - 10 * S_CUA_SO_2_2 - 168 * X_CUA_SO_2_2 - O_CUA_SO_2_3 - 10 * S_CUA_SO_2_3 - 532 * X_CUA_SO_2_3 - O_CUA_SO_3_3 - 10 * S_CUA_SO_3_3 - 364 * X_CUA_SO_3_3 - 2 * O_CUA_NGACH_1_1 - 20 * S_CUA_NGACH_1_1 - 144 * X_CUA_NGACH_1_1 - 2 * O_CUA_NGACH_1_2 - 20 * S_CUA_NGACH_1_2 - 360 * X_CUA_NGACH_1_2 - 2 * O_CUA_NGACH_1_3 - 20 * S_CUA_NGACH_1_3 - 600 * X_CUA_NGACH_1_3 - 2 * O_CUA_NGACH_2_2 - 20 * S_CUA_NGACH_2_2 - 216 * X_CUA_NGACH_2_2 - 2 * O_CUA_NGACH_2_3 - 20 * S_CUA_NGACH_2_3 - 456 * X_CUA_NGACH_2_3 - 2 * O_CUA_NGACH_3_3 - 20 * S_CUA_NGACH_3_3 - 240 * X_CUA_NGACH_3_3 - 3 * O_CUA_CHINH_1_1 - 30 * S_CUA_CHINH_1_1 - 28 * X_CUA_CHINH_1_1 - 3 * O_CUA_CHINH_1_2 - 30 * S_CUA_CHINH_1_2 - 84 * X_CUA_CHINH_1_2 - 3 * O_CUA_CHINH_1_3 - 30 * S_CUA_CHINH_1_3 - 168 * X_CUA_CHINH_1_3 - 3 * O_CUA_CHINH_2_2 - 30 * S_CUA_CHINH_2_2 - 56 * X_CUA_CHINH_2_2 - 3 * O_CUA_CHINH_2_3 - 30 * S_CUA_CHINH_2_3 - 140 * X_CUA_CHINH_2_3 - 3 * O_CUA_CHINH_3_3 - 30 * S_CUA_CHINH_3_3 - 84 * X_CUA_CHINH_3_3 = 0;
Bảng 3: Các điều kiện ràng buộc của bài toán tối ưu
[1] O_CUA_SO_1_1 - O_CUA_SO_1_2 = - 40; [2] O_CUA_SO_1_2 - O_CUA_SO_1_3 = - 100; [2] O_CUA_SO_1_2 - O_CUA_SO_1_3 = - 100; [3] O_CUA_SO_2_2 - O_CUA_SO_2_3 = - 60; [4] O_CUA_NGACH_1_1 - O_CUA_NGACH_1_2 = - 30; [5] O_CUA_NGACH_1_2 - O_CUA_NGACH_1_3 = - 75; [6] O_CUA_NGACH_2_2 - O_CUA_NGACH_2_3 = - 45; [7] O_CUA_CHINH_1_1 - O_CUA_CHINH_1_2 = - 5; [8] O_CUA_CHINH_1_2 - O_CUA_CHINH_1_3 = - 15; [9] O_CUA_CHINH_2_2 - O_CUA_CHINH_2_3 = - 10;
[10] 40 * X_CUA_SO_1_1 + 100 * X_CUA_SO_1_2 + 230 * X_CUA_SO_1_3 +
60 * X_CUA_NGACH_1_1 + 150 * X_CUA_NGACH_1_2 + 250 * X_CUA_NGACH_1_3 + 15 * X_CUA_CHINH_1_1 + 45 * X_CUA_CHINH_1_2 + 90 * X_CUA_CHINH_1_3 + Y_CUA_SO_1 + 2 * X_CUA_CHINH_1_1 + 45 * X_CUA_CHINH_1_2 + 90 * X_CUA_CHINH_1_3 + Y_CUA_SO_1 + 2 * Y_CUA_NGACH_1 + 3 * Y_CUA_CHINH_1 <= 400; [11] 60 * X_CUA_SO_2_2 + 190 * X_CUA_SO_2_3 + 90 * X_CUA_NGACH_2_2 +
190 * X_CUA_NGACH_2_3 + 30 * X_CUA_CHINH_2_2 + 75 * X_CUA_CHINH_2_3 + Y_CUA_SO_2 + 2 * Y_CUA_NGACH_2 + 3 * Y_CUA_CHINH_2 <= 400; + 2 * Y_CUA_NGACH_2 + 3 * Y_CUA_CHINH_2 <= 400; [12] 130 * X_CUA_SO_3_3 + 100 * X_CUA_NGACH_3_3 + 45 *
X_CUA_CHINH_3_3 + Y_CUA_SO_3 + 2 * Y_CUA_NGACH_3 + 3 * Y_CUA_CHINH_3 <= 400; [13] 4 * Q_CUA_SO + 4 * Q_CUA_NGACH + 4 * Q_CUA_CHINH <= 16704;
[14] 4 * Q_CUA_SO + 6 * Q_CUA_NGACH + 5 * Q_CUA_CHINH <= 17880; [15] 4 * Q_CUA_SO + 6 * Q_CUA_NGACH + 5 * Q_CUA_CHINH <= 18880;
[16] 6 * Q_CUA_SO + 12 * Q_CUA_NGACH + 12 * Q_CUA_CHINH <= 19500;
2.2.2. Lựa chọn công cụ giải bài toán tối ưu
LINGO là một bộ công cụ được phát triển để thiết lập và xử lý các bài toán tối ưu bằng nhiều mô hình khác nhau một cách dễ dàng và hữu hiệu.
Dưới đây sẽ trình bày cụ thể các bước giải bài toán bằng LINGO qua các bước khai báo, khởi tạo các biến, khai báo hàm mục tiêu, lập các điều kiện ràng buộc và các bước tính toán trung gian khác. Cú pháp, tập lệnh và cách thức lập trình trong LINGO được tham khảo trong [14].
− Phần khai báo các biến, các tập hợp đối tượng
MODEL:
SETS:
P/Cua_so,Cua_chinh,Cua_ngach/:
!Cac yeu to lien quan toi san xuat;
PT, ! Product time - Thoi gian san xuat mot san pham;
PC, ! Product cost - Chi phi san xuat(luong nhan cong, chi phi quan
ly, ..) co dinh tren moi san pham;
ST, ! Setup time - Thoi gian chuan bi may;
SC, ! Setup cost - Chi phi chuan bi may;
HC, ! Holding cost - Chi phi luu kho;
Q, ! Quantity - Tong so moi san phan can SX trong 3 thang;
MC ! Material cost - Tong so nguyen vat lieu can dung cho moi san
pham;
;
! Tap hop ky san lap ke hoach theo thang. Demo cho 3 thang;
T/1..3/:;
! Tap hop nguyên vật liệu;
R/Profile,Thep,Kinh,Phu_kien/:
A; ! Avaiable - So NVL san co cho moi loai;
! Moi san phan trong mot ky co;
PxT( P, T):
D, ! Demad - So luong theo nhu cau thi truong, dat hang;
X, ! So luong moi san pham duoc lap ke hoach;
O, ! Onhand - Ton khi Item i trong ky t;
Y; ! Bien lua chon, =1 neu san pham duoc san xuat
! Tap hop nguyen vat lieu can su dung;
PxR( P, R):
U, ! Material Used - So NVL dung cho moi san pham;
TU; ! Total Material used - Tong so NVL da dung cho mot phan pham;
ENDSETS
− Phần khởi tạo các giá trị các biến và các ma trận nhu cầu, chi phí
DATA:
! Gioi han nang luc SZ;
C = 200;
! He so thoi gian san xuat;
PT = 1 1.5 1.2;
! He so chi phi san xuat moi san pham;
PC = 10 20 15;
! He so chi phi luu kho moi san pham;
HC = 0.1 0.2 0.15; ! Setup times; ! Setup times; ST = 0.3 0.2 0.1; ! Setup costs; !SC = 0.15 0.12 0.1; SC = 10 20 15;
! Ma tran so luong nhu cau moi san pham/trong moi ky; !D1;
! Ma tran cac NVL su dung cho moi san pham:
Cot la Profile thep,Khung nhom,Kinh, Bo phu kien kim khi;
U = 4 4 4 6
4 6 6 12 4 5 5 12; 4 5 5 12;
! Tong so chi phi (don gia) NVL tren moi san pham;
MC = 18 28 26;
! Tong NVL san co;
A = 16704 17880 18880 19500;
ENDDATA
− Các bước tính toán, đối chiếu điều kiện ràng buộc
SETS:
PxTxT( P, T, T)| &3 #GE# &2:
TP, ! Total produc - So san pham luy ke den ky;
TPC, ! Total Product cost - Tong chi phi luy ke den ky;
MAKE; ! Dai luong dieu chinh phan bo so luong san pham can san xuat
trong moi ky;
ENDSETS
! TINH TOAN TONG SO SAN PHAM, TONG CHI PHI;
@FOR( P(I):
@FOR( T(T1): [Tinh_toan_chi_phi_SP]
TP(I, T1, T1) = D(I, T1); ! Tong so SP khoi tao = Demand;
TPC(I, T1, T1) = (PC(I) + MC(I)) * D(I, T1); ! Tong cho phi khoi
tao = Don gia 1 SP * Demand;
@FOR( T(T2)| T2 #GT# T1:
TP(I, T1, T2) = TP(I, T1, T2 - 1) + D(I, T2); ! Tong so SP ky
nay = Tong SP ky truoc + Demand ky nay;
TPC(I, T1, T2) = TPC(I, T1, T2 - 1) + ( PC(I) + MC(I) +
HC(I)*(T2-T1) ) * D(I, T2); ! Tong chi phi ky nay = Tong chi phi ky truoc +
( Chi phi SP + Chi phi NVL + Chi phi luu kho) cua ky nay;
)
) ); );
! HAM MUC TIEU LA CUC TIEU TONG CHI PHI SAN XUAT VA CHI PHI CHUAN BI;
MIN = F;
F = @SUM( PxTxT: TPC * MAKE) + @SUM(PxT(I,T1): SC(I)*Y(I,T1));
@FOR( P( I): [TINH_TOAN_MAKE]
! Khoi tao trong thang 1, X deu mac dinh = 1;
@SUM( PxTxT(I, T1, T2) | T1 #EQ# 1: MAKE(I, T1, T2)) = 1;
@FOR( T(K)| K #GT# 1:
! Neu ket thuc san xuat ky K-1 thi bat dau san xuat o ky K;
@SUM( PxTxT(I, T1, T2)| T2 #EQ# K - 1: MAKE(I, T1, K - 1)) = @SUM(
PxTxT(I, K, T2): MAKE(I, K, T2));
);
! Bien quet dinh san pham nao duoc san xuat tai ky nao;
@FOR(T(T1):
Y(I,T1) = @SUM(PxTxT(I,T1,T2): (TP(I,T1,T2) #GT# 0) * MAKE(I,T1,T2))
! Tinh toan so luong san pham can san xuat trong moi ky;
@FOR( T( T1):
X(I, T1) = @SUM( PxTxT(I, T1, T2): TP(I, T1, T2) * MAKE(I, T1, T2)) ;
); ); );
! Dieu kien rang buoc;
@FOR( T(T1): [Rang_buoc_KN_SX]
@SUM(P(I): ST(I) * Y(I,T1)) +
@SUM(PxTxT(I, T1, T2): PT( I) * TP(I, T1, T2) * MAKE(I, T1, T2)) <= C;
);
! Tinh toan tong so san pham;
@FOR(P(I): Q(I) = @SUM(PxT(I,T1): X(I,T1)) );
! Gioi han kho luu tru;
!SCENARIO 6: Q(I) <= 250 -> VO NGHIEM;
@FOR(P(I): Q(I) <= 500);
! Gioi han nguyen vat lieu hieu co;
@FOR( R(J): [Rang_buoc_NVL]
@SUM( P(I): Q(I) * U( I, J) ) <= A(J)
);
! Tinh toan tong so nguyen vat lieu dung cho SX;
CALC:
@FOR( P(I):
@FOR(R(J): TU(I,J) = Q(I) * U( I, J) ) );
ENDCALC
!Y thouc {0,1} integer;
@FOR( PXT: @BIN( Y));
! Write output ;
DATA:
@TEXT('E:\KLTN\Ouput\Make.txt') =
@WRITEFOR(PxT(I,T1): 'X[', PxT(I,T1),']=', X(I,T1), @NEWLINE(1));
@TEXT('E:\KLTN\Ouput\NVL.txt') =
@WRITEFOR(PxR(I,J): 'NVL[', PxR(I,J),']=', TU(I,J), @NEWLINE(1));
!@TEXT('E:\KLTN\Ouput_solver\Make_out.TXT') = PXT, MAKE;
ENDDATAEND END
Kết quả thực thi chương tình được lưu vào các file dữ liệu dạng text là dữ liệu đầu vào cho chức năng lập kế hoạch sản phẩm của phân hệ quản lý sản xuất.
2.2.3. Đánh giá một vài trường hợp đặc biệt của bài toán