Tải bản đầy đủ (.docx) (8 trang)

Viết chương trình giải bài toán phân công công việc bằng cách ứng dụng nguyên lý thứ tự

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (86.86 KB, 8 trang )

TRƯỜNG ĐẠI HỌC MỎ ĐỊA CHẤT
KHOA CÔNG NGHỆ THÔNG TIN

TRÍ TUỆ NHÂN TẠO
Đề tài: Viết chương trình giải bài toán phân công công việc bằng cách
ứng dụng nguyên lý thứ tự

GIÁO VIÊN HƯỚNG DẪN:
TS. LÊ VĂN HƯNG

NHÓM SINH VIÊN THỰC HIỆN:
VĂN HUY NAM
HOÀNG THỊ PHƯƠNG THẢO


Lời nói đầu
Năng lực máy tính ngày càng mạnh mẽ là điều kiện thuận lợi cho trí tuệ nhân tạo: cho
phép những chương trình máy tính áp dụng các thuật giải trí tuệ nhân tạo có khả năng phản ứng
nhanh và hiệu quả hơn trước.
Khả năng hiện tại của tất cả các sản phẩm trí tuệ nhân tạo vẫn còn khiêm tốn nhưng
ngành khoa học này vẫn đang tiến bộ mỗi ngày và tỏ ra hữu dụng trong 1 số công việc đòi hỏi trí
thông minh của con người. trí tuệ nhân tạo đã trở thành một phần thiết yếu của công nghiệp kỹ
thuật, cung cấp giải pháp cho những vấn đề khó khăn nhất trong ngành khoa học máy tính.
Đối với lập kế hoạch các hệ thống thông minh phải biết thiết lập các mục tiêu và cách đạt
được chúng, có khả năng chọn phương thức tốt nhất trong các phương thức có sẵn để đạt được
mục tiêu. Áp dụng lĩnh vực này của trí tuệ nhân tạo vào bài toàn phân công công việc ta thấy cho
ra kết quả tốt. Trong bài tập phân công công việc nay nhóm chúng em đã sử dụng ngôn ngữ C để
làm bài toán.


Chương 1: Phân tích bài toán


1. Đề bài:
Một công ty nhận được hợp đồng gia công m chi tiết C1, C2, …, Cn. Cty có n máy gia
công là M1, M2, …, Mm. Mỗi chi tiết có thể được gia công trên bất cứ máy nào. Một khi đã gia
công một chi tiết trên một máy, công việc sẽ tiếp tục cho đến lúc hoàn thành. Việc gia công chi
tiết Ci bất kỳ trên một máy bất kỳ cần dùng một thời gian bất kỳ là ti. Tìm cách phân bổ công
việc để thời gian hoàn thành toàn bộ các chi tiết là nhanh nhất.
2. Phân tích bài toán
Sử dụng nguyên lý thứ tự sắp xếp n các công việc tăng dần theo thời gian và sắp nó vào
m máy.
Ví dụ: Cụ thể có 3 máy M1, M2, M3 và 6 chi tiết với thời gian tương ứng là t1=2, t2=5,
t3=8, t4=1, t5=5, t6=1
Khi sắp xếp theo thứ tự tăng dần ta được: t4=1, t6=1, t1=2, t2=5, t5=5 , t3=8
Lần lượt sắp xếp các chi tiết theo thứ tự đó vào máy còn dư nhiều thời gian nhất
Phương án L* này cũng chính là phương án tối ưu với tổng thời gian là 8, đúng bằng thời
gian hoàn thành chi tiết C3
Độ phức tạp là O(n)


Chương 2: Thuật giải và code
#include<iostream.h>
#include<conio.h>
1.

Định nghĩa kiểu dữ liệu cho công việc gồm biến đếm chỉ phần tử tiếp theo của mảng,
biến tính tổng thời gian máy đã làm việc và biến mảng gồm max công việc máy đã
làm.
typedef struct

{
int bot;//bien dem chi phan tu tiep theo cua array

int sum;
int array[MAX];
}MAY;
2. Xuất mảng void
XuatMang(int a[], int n)
{
for(int i=0; i{
cout<}
cout<}
3. Hoán vị công việc
void Swap(int &a, int &b)
{
int tmp;
tmp=a;
a=b;


b=tmp;
}
4. Xắp xếp công việc giảm dần
void GiamDan(int a[], int n)
{
for(int i=0; i{
for(int j=i+1; j{
if(a[i]

{
Swap(a[i], a[j]);
}
}
}
}
5. Khởi tạo cho mảng giá trị bằng 0
void GanMangBangKhong(int a[], int n)
{
for(int i=0; i{
a[i]=0;
}
}
6. Tìm ra máy có tổng thời gian làm các công việc là ít nhất
int MinDong(MAY may[], int m)


{
int minwhere=0;
for(int i=1; i{
if(may[i].sum{
minwhere=i;
}
}
return minwhere;
}
7. Chia công việc cho các máy

int ChiaViec(int viec[], int n, int m)
{
MAY may[MAX];
int min,max;

for(int k=0; k{
GanMangBangKhong(may[k].array, MAX);
may[k].bot=0;
may[k].sum=0;
}

for(int i=0; i{


//tim ra may co tg lam viec ngan nhat, lay vi tri may do ra
min=MinDong(may, m);
//gan cong viec tiep theo vao may do
may[min].array[may[min].bot++]=viec[i];
//cong tg cua cong viec do vao tong tg lam viec (sum) cua may do
may[min].sum=may[min].sum+viec[i];
}

max=may[0].sum;

for(int j=0; j{
cout<<"May "<XuatMang(may[j].array, may[j].bot);

cout<//tim ra tong tg lon nhat cua 3 may
if(may[j].sum>max)
max=may[j].sum;
}
return max;
}
8. Xây dựng công việc phân công công việc
9. void main()
{
int n,m;
int arrayviec[MAX];


char ch;
cout<<"\t\t\tn Cong viec chia cho m May"<<<"\t\t\t\t\t\t\t\t Ddo 2-11-10";
do
{
cout<cin>>n;
cout<<"Thoi gian tung cong viec "<NhapMang(arrayviec, n);
cout<<"Nhap vao so may xu ly cong viec: ";
cin>>m;
cout<XuatMang(arrayviec, n);




×