1. Trang chủ
  2. » Luận Văn - Báo Cáo

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ự

8 3,7K 63

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 8
Dung lượng 26,84 KB

Nội dung

TRƯỜNG ĐẠI HỌC MỎ ĐỊA CHẤTKHOA 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: N

Trang 1

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: NHÓM SINH VIÊN THỰC HIỆN:

HOÀNG THỊ PHƯƠNG THẢO

Trang 2

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

Trang 3

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)

Trang 4

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<n; i++)

{

cout<<a[i]<<"\t";

}

cout<<endl;

}

3 Hoán vị công việc

void Swap(int &a, int &b)

{

int tmp;

tmp=a;

a=b;

Trang 5

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<n-1; i++)

{

for(int j=i+1; j<n; j++)

{

if(a[i]<a[j])

{

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<n; 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)

Trang 6

int minwhere=0;

for(int i=1; i<m; i++)

{

if(may[i].sum<may[minwhere].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<m; k++)

{

GanMangBangKhong(may[k].array, MAX); may[k].bot=0;

may[k].sum=0;

}

for(int i=0; i<n; i++)

{

Trang 7

//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<m; j++)

{

cout<<"May "<<j+1<<" :\t";

XuatMang(may[j].array, may[j].bot);

cout<<endl;

//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];

Trang 8

char ch;

cout<<"\t\t\tn Cong viec chia cho m May"<<endl <<"\t\t\t\t\t\t\t\t Ddo 2-11-10";

do

{

cout<<endl<<"So cong viec: ";

cin>>n;

cout<<"Thoi gian tung cong viec "<<endl; NhapMang(arrayviec, n);

cout<<"Nhap vao so may xu ly cong viec: "; cin>>m;

cout<<endl;

XuatMang(arrayviec, n);

Ngày đăng: 02/06/2016, 15:11

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w