Tải bản đầy đủ (.doc) (6 trang)

Tìm hiểu bài toán phân công công việc và demo code

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 (169.64 KB, 6 trang )

TRƯỜNG ĐẠI HỌC NÔNG NGHIỆP HÀ NỘI
KHOA CÔNG NGHỆ THÔNG TIN

BÀI TẬP LỚN
TRÍ TUỆ NHÂN TẠO
Đề tài: “Tìm hiểu bài toán phân công công việc và demo”.
Giáo viên hướng dẫn

: TS.Nguyễn Thị Thủy

Nhóm sinh viên thực hiện: Kiều Văn Hải
Vương Minh Huế
Mùa Thị May
Hà Sơn Tùng
Lớp

: THA- K52

Hà Nội 2011


I, Bài toán phân công công việc
1, Nội dung bài toán
Một đề án gồm n công việc và các việc sẽ được thực hiên bởi m máy như nhau.
Giả sử biết thời gian để 1 máy thực hiện viêc thứ j là tj
Yêu cầu: Tìm phương án phân công sao cho thời gian hoàn thành toàn
bộ công việc là thấp nhất.
Mẫu số liệu : n=10, m=3
tj = 4 9 5 2 7 6 10 8 7 5
2, Giải thuật: được viết dưới dạng thủ tục tương tự như thuật toán nhưng
không đòi hỏi các tiêu chuẩn như thuật toán.


- Tính đúng: chấp nhận các giải thuật đơn giản, có thể cho kết quả đúng hay
gần đúng nhưng có khả năng thành công cao hơn.
- Để có thể được chấp nhận, giải thuật phải thể hiện một giải pháp hợp lý nhất
có thể trong tình huống hiện tại bằng cách:
+ Tận dụng mọi thông tin hữu ích
+ Sử dụng tri thức, kinh nghiệm trực giác của con người
+ Tự nhiên, đơn giản nhưng cho kết quả chấp nhận được
è Giải thuật Heuristic
Giải thuật cho bài toán phân công đơn giản:
Chọn việc J chưa phân công có thời gian thực hiện cao nhất phân công cho
máy có thời gian làm việc thấp nhất
for(k=0;k{
Chọn việc J chưa phân công có thời gian thực hiện cao nhất.
Chọn máy M có thời gian làm việc thấp nhất
Bố trí việc J cho máy M.


}
n=10, m=3

II, Chương
//
//

trình

Bai toan phan cong cong viec: n Viec chia cho m May
Bai tap lon


#include<iostream.h>
#include<conio.h>
#define MAX 20
typedef
{
int
int
int
}MAY;

struct
bot;//bien dem chi phan tu tiep theo cua array
sum; //tong thoi gian may da lam
array[MAX]; //mang cac cong viec may da lam

void NhapMang(int a[], int n)
{
for(int i=0; i{
cin>>a[i];
}
}
void XuatMang(int a[], int n)
{
for(int i=0; i{
cout<}
cout<}

void Swap(int &a, int &b)//Hoan

{
int tmp;
tmp=a;
a;
b=tmp =b;
}

vi cong viec


void GiamDan(int a[], int n)// Sap xep cong viec theo thu tu giam dan cua
thoi gian
{
for(int i=0; i{
for(int j=i+1; j{
if(a[i]{
Swap(a[i], a[j]);
}
}
}
}
void GanMangBangKhong(int a[], int n)//Khoi dong cac may de lam viec
{
for(int i=0; i{

a[i]=0;
}
}
//
Tim ra may co tg lam tong cong viec it nhat
int MinDong(MAY may[], int m)
{
int minwhere=0;
for(int i=1; i{
if(may[i].sum{
minwhere=i;
}
}
return minwhere;
}
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 cac may
if(may[j].sum>max)
max=may[j].sum;
}
return max;
}
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 Bai tap lon";
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);
GiamDan(arrayviec, n);
cout<<"Thoi gian de lam xong cac cong viec la: "<c, n, m)<cout<cout.flush();
ch=getche();
}while(ch=='y' || ch=='Y');
}

III, Tài

liệu tham khảo


1. Trí tuệ nhân tạo(Chương I: THUẬT TOÁN – THUẬT GIẢI, phần II:
THUẬT GIẢI HEURISTIC)_Hoàn Kiếm
2. Nguồn Internet



×