1. Trang chủ
  2. » Giáo Dục - Đào Tạo

BÀI báo cáo môn NHẬP môn TRÍ TUỆ NHÂN tạo đề tài gene giải thuật để giải bài toán ba lô

44 2 0
Tài liệu đã được kiểm tra trùng lặp

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

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Gene Giải Thuật Để Giải Bài Toán Ba Lô
Tác giả Lương Anh Quý, Đào Tiến Minh, Nguyễn Hoàng Việt, Tô Mạnh
Người hướng dẫn Đào Việt Anh
Trường học Trường đại học Hải Phòng
Chuyên ngành Nhập môn Trí Tuệ Nhân Tạo
Thể loại Bài báo cáo môn
Năm xuất bản 2022
Thành phố Hải Phòng
Định dạng
Số trang 44
Dung lượng 3,68 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Khoa Công Ngh Thông Tin ệ3  Giớ i thi u ệ rong ngành khoa học máy tính, tìm kiếm lời giải tối ưu cho các bài toán là vấn đề được các nhà khoa học máy tính đặc biệt rất quan tâm.. Mục đ

Trang 1

TRƯỜNG ĐẠI HỌC H I PHÒNG Ả

KHOA CÔNG NGH THÔNG TIN Ệ

BÀI BÁO CÁO

Môn :

NHẬP MÔN TRÍ TU NHÂN TẠO

Nhóm 11 – Đề tài: Gene Gi i thuả ật để ải bài toán ba- lô 2 gi

Sinh viên th c hiên: ự Lương Anh Quý

Đào Tiến Minh Nguyễn Hoàng Vi t ệ

Tô Mạnh

Lớp: DHCNTT1.K22

Giảng viên: Đào Việt Anh

Hải Phòng, tháng 12 năm 2022

Trang 2

Khoa Công Ngh Thông Tin ệ

1

Trang 3

Khoa Công Ngh Thông Tin ệ

2

Mục l c

Giới thi u ệ 3

I Giải thu t di truy n (Genertic Algorithm - ậ ề GAs) 4

1 Gi i thi u: ớ ệ 4

2 Các thành phần cơ bản c a Gas ủ 4

II Bài toán Ba lô 2 6

1 Phát bi u bài toán:ể 6

2 ng dỨ ụng Gas để giải quyết bài toán: 6

III Ứng d ng mô ph ng bài toán: ụ ỏ 7

1 Môi trường xây dựng ứng dụng: 7

2 C u trúc ng d ng: ấ ứ ụ 7

3 M t s thành ph n cộ ố ầ ủa chương trình: 8

4 Chương trình 9

5 Giao di n ệ 40

Trang 4

Khoa Công Ngh Thông Tin ệ

3

 Giớ i thi u

rong ngành khoa học máy tính, tìm kiếm lời giải tối ưu cho các bài toán là vấn đề được các nhà khoa học máy tính đặc biệt rất quan tâm Mục đích chính của các thuật toán tìm kiếm lời giải

là tìm ra lời giải tối ưu nhất cho bài toán trong thời gian nhỏ nhất Các thuật toán như tìm kiếm không có thông tin / vét cạn (tìm kiếm trên danh sách, trên cây hoặc đồ thị) sử dụng phương pháp đơn giản nhất và trực quan nhất hoặc các thuật toán tìm kiếm có thông tin sử dụng heurictics để áp dụng các tri thức về cấu trúc của không gian tìm kiếm nhằm giảm thời gian cần thiết cho việc tìm kiếm được sử dụng nhiều nhưng chỉ với không gian tìm kiếm nhỏ và không hiệu quả khi tìm kiếm trong không gian tìm kiếm lớn Tuy nhiên, trong thực tiễn có rất nhiều bài toán tối ưu với không gian tìm kiếm rất lớn cần phải giải quyết Vì vậy, việc đòi hỏi thuật giải chất lượng cao và sử dụng kỹ thuật trí tuệ nhân tạo đặc biệt rất cần thiết khi giải quyết các bài toán có không gian tìm kiếm lớn Thuật giải di truyền (genetic algorithm) là một trong những kỹ thuật tìm kiếm lời giải tối ưu đã đáp ứng được yêu cầu của nhiều bài toán và ứng dụng Hiện nay, thuật toán di truyền cùng với logic mờ được ứng dụng rất rộng rãi trong các lĩnh vực phức tạp Thuật toán di truyền kết hợp với logic mờ chứng tỏ được hiệu quả của nó trong các vấn đề khó có thể giải quyết bằng các phương pháp thông thường hay các phương pháp cổ điển, nhất là trong các bài toán cần có

sự lượng giá, đánh giá sự tối ưu của kết quả thu được Chính vì vậy, thuật giải di truyền đã trở thành đề tài nghiên cứu thú vị và đem đến nhiều ứng dụng trong thực tiễn

Tuy giải thuật Gene (GA) có thể chậm hơn một số thuật toán khác song

GA lại có một vài ưu điểm nổi trội như: dễ thể hiện, không bị rơi vào trạng thái cực trị địa phương, dễ thay đổi hàm thích nghi, … Vì vậy, thuật toán Gene là một lựa chọn thích hợp cho dạng bài toán quyết định

Ví dụ như bài toán tìm đường, bài toán balô, …

Trong khuôn kh cổ ủa đề tài này, em xin trình bày n i dung c a giộ ủ ải thuật Gene và ng d ng c a nó trong vi c gi i quy t bài toán Chi c ba ứ ụ ủ ệ ả ế ế

lô lo i 2 (Knapsack 2) vạ ới phương pháp lựa chọn Rank Selection

T

Trang 5

Khoa Công Ngh Thông Tin ệ

+ Đánh giá độ thích nghi của

mỗi cá thể trong P(i)

+ L a ch n các cha tự ọ ừ P(i) dựa

trên độ thích nghi c a chúng trong P( ủ i)

2 Các thành ph ần cơ bản của Gas

a Khởi tạo (Initializetion)

Tạo ng u nhiên m t s cá thẫ ộ ố ể chấp nhận được để được một quần th phù h p vể ợ ới kích thước quần thể được quy định s n ẵ

b Hàm thích nghi (Fitness Function)

Gán giá trị thích nghi cho m i cá th Giá tr thích nghi càng ỗ ể ịsát v i th c tớ ự ế thì độ chính xác càng cao

c Lựa chọn để ết hợp lại (Selection For Recombine) k

Có nhi u ki u l a ch n ề ể ự ọ

Trang 6

Khoa Công Ngh Thông Tin ệ

g Đánh giá

Khi đã có quần thể mới, ta ti n hành kiế ểm tra đánh giá xem

cá th nào t t nh t, cá th nào t i Lo i b b t nh ng cá th ể ố ấ ể ồ ạ ỏ ớ ữ ểtồi để lặp lại các bước trên đó

Trang 7

Khoa Công Ngh Thông Tin ệ

6

II Bài toán Ba lô 2

1 Phát bi ểu bài toán:

Bạn chuẩn bị đi du lịch và bạn cần chuẩn bị một số thứ Tuy nhiên, bạn không th ể đem tất c ả đi được vì sức người có hạn B n phạ ải đem theo đồ gì, số lượng mỗi loại là bao nhiêu để đạt đượ ổc t ng giá tr ị

là l n nhớ ất nhưng vẫn trong khả năng có thể đem theo được

2 Ứng ụng Gas để ả d gi i quy t bài toán: ế

a Các bước thực hiện:

* Kh i tở ạo đồ ậ v t và trọng lượng tối đa ba lô:

- Tạo ra x đồ v t v i khậ ớ ối lượng và giá tr khác nhau (ng u nhiên) ị ẫ

- Ấn định khối lượng tối đa của túi

* Kh i t o qu n th : ở ạ ầ ể

Tạo ra n chi c ba lô, m i ba lô ế ỗ chứa số lượng các vật

là khác nhau, không ba lô nào b quá t i ị ả

Số lượng m i vỗ ật trong balô là một s ngố ẫu nhiên trong khoảng từ 0 → KL balô/KL vật

Xác định s cá thố ể con định t o ra ạLặp đến khi đủ số cá thể con Lấy ng u nhiên 1 s thu c kho ng (1; t ng Rank) ẫ ố ộ ả ổCộng các Rank đến khi đc giá trị > giá trị ngẫu nhiên

Xác định Gene được chọn và đưa vào mảng để lai

* Mã hóa:

Với các Gene được chọn để đem lai, mã hóa chúng thành d ng chu i bạ ỗ ằng phương pháp mã hóa giá trị

Trang 8

Khoa Công Ngh Thông Tin ệ

7

* Lai:

Phương pháp lai được chọn là lai 2 điểm

Chuỗi gen được chia thành 3 ph n, ph n 1 có dài = ¼ chuầ ầ độ ỗi gene, phần 2 có độ dài = ½ chu i gene, ph n 3 là ph n còn l i ỗ ầ ầ ạCách lai:

Bố a b c Con1 a b’ c

Mẹ a’ b’ c’ Con2 a’ b c’

* Đột biến

D a vào t lự ỉ ệ t biđộ ến → số lần đột biến → số cá thể t biđộ ến Chọn 3 vị trí để đột biến Giá trị đột bi n = v trí ế ị

* Đánh giá

Giải mã gene: T chuừ ỗi mã hóa đưa về ạ d ng knapsack → Sau quá trình lai ghép, quần thể gồm cả các cá th cha và ểcon

Vì qu n thầ ể có kích thước cố định nên phải đánh giá để chọn ra

n cá th t t cho th h kể ố ế ệ ế tiếp

* L p lặ ại các bước trên đến khi qu n th h i t ầ ể ộ ụ hoặc sau k thế hệ

III Ứng d ng mô ph ng bài toán: ụ ỏ

1 Môi trường xây d ng ng d ng: ự ứ ụ

- Framework:.Net 3.5

- IDE: Microsoft Visual Studio 2008

2 C u trúc ng d ng: ấ ứ ụ

Ứng dụng được chia thành 2 phần:

Trang 9

Khoa Công Ngh Thông Tin ệ

8

- Core: Ch a các file class mô t thu t toán ứ ả ậ

- Presentation: Ch a các file mô t giao di n ứ ả ệ

3 M t s thành ph n cộ ố ầ ủa chương trình:

Class

Item mô t v t chả ậ ứa trong túi Knapsack mô t chiả ếc balô (cá th ) ểGAs thuật toán Gas

Properties và Methods in class

Item ItemWeight Khối lượng vật

ItemValue Giá tr v t ị ậ

Knapsack

knapsackMaxWeight KL tối đa của túi KnapsackCurrentWeight KL hi n t i c a túi ệ ạ ủKnapsackValue Giá tr hi n t i ị ệ ạRank Rank trong qu n th ầ ểListItemAmount Mảng ch a sl m i v t ứ ỗ ậoverload() Kiểm tra túi quá t i ảshowItem() Hiển thị sl các v t d ng ậ ạ

string

GAs

KnapsackWeight KL tối đa của túi knapsackAmount SL túi trong 1 th h ế ệmutationProp tỉ lệ đột bi n ếlistItem dsách các đồ vật listKnapsack dsách các cá th trong 1 ể

thế h ệnewListKnapsack danh sách cá thể cũ và

mới

Trang 10

Khoa Công Ngh Thông Tin ệ

9

ksBestCurrent chiếc túi t t nh t ố ấmaxValue giá tr c a túi t t nh t ị ủ ố ấgoodGeneration thế h có túi t t nh t ệ ố ấencodedListKnapsack mảng các gene đc mã hóa initialize() khởi t o qu n ạ ầ thể selectionFor

NewGeneration()

chọn từ quần th sau khi ểsinh ra các cá th t t ể ốselectionFor

Recombination() các cặp được đem lai encoding() mã hóa các c p s lai vặ ẽ ới

nhaucrossover() lai ghép mutation() đột biến evaluation() giải mã và t ng h p cá ổ ợ

thểgene() tổng hợp các bước

public class Main {

private static final long INF = (long) 1e18 + 5;

public static void main(String[] args) {

Scanner sc = new Scanner(System.in);

int N = sc.nextInt(), W = sc.nextInt();

int[] values = new int[N], weights = new int[N];

Trang 11

Khoa Công Ngh Thông Tin ệ

for (int item = 0; item < N; item++) {

for (int value_already = N1000 - values[item]; value_already >=0 ; value_already ) {

dp[value_already + values[item]] = Math.min(dp[value_already + values[item]], dp[value_already] + weights[item]);

// Genetic Algorithm, for knapsack problem

// A class to describe a pseudo-DNA, i.e genotype

// Here, a virtual organism's DNA is an array of character // Functionality:

// convert DNA into a string

// calculate DNA's "fitness"

// crossover DNA with another set of DNA

// mutate DNA

Trang 12

Khoa Công Ngh Thông Tin ệ

11

// Constructor (makes a random DNA)

function DNA(myData) {

// The genetic sequence

this.genes = []; // values of the gene (0, 1)

this.data = myData; // holds info about items

this.elements = myData.elements;

var num = this.elements.length; // number of elements to choose from

this.fitness = 0; // fitness of this gene

this.totalWeight = 0; // total weight of gene

this.totalBenefit = 0; // total benefits by this gene

// generate this gene randomly

for (var i = 0; i < num; i++) {

this.genes[i] = Math.floor(Math.random() * 2); // Pick

} // if the Weight is over remove random element while (totalWeight > this.data.maxCapacity) { var randomIndex = Math.floor(Math.random()

* num);

Trang 13

Khoa Công Ngh Thông Tin ệ

12

while (this.genes[randomIndex] == 0) { randomIndex = Math.floor(Math.random() * num);

} found element to delete, update gene //

this.genes[randomIndex] = 0;

totalWeight -= this.elements[randomIndex].weight;

totalBenefit -= this.elements[randomIndex].benefit;

} // update gene totals this.totalWeight = totalWeight;

var midpoint = Math.floor(Math.random() * this.genes.length); // Pick

// a // random // midpoint // cross over , Half from one, half from the other for (var i = 0; i < this.genes.length; i++) {

if (i > midpoint) child.genes[i] = this.genes[i];

else child.genes[i] = partner.genes[i]; }

return child;

};

// cross over in the middle

Trang 14

Khoa Công Ngh Thông Tin ệ

13

this.crossoverMiddle = function(partner) {

// A new child var child = new DNA(this.data);

var midpoint = Math.floor(this.genes.length / 2);// midpoint

// cross over , Half from one, half from the other for (var i = 0; i < this.genes.length; i++) {

if (i > midpoint) child.genes[i] = this.genes[i];

else child.genes[i] = partner.genes[i]; }

var mixingRatio = 0.5;

// cross over , Half from one, half from the other for (var i = 0; i < this.genes.length; i++) {

if (Math.random() < mixingRatio) child.genes[i] = this.genes[i];

else child.genes[i] = partner.genes[i]; }

} else { this.genes[i] = 1;

}

Trang 15

Khoa Công Ngh Thông Tin ệ

14

} } };

function Population(m, num, myData) {

this.population; // Array to hold the current population this.generations = 0; // Number of generations evaluated for now

this.finished = false; // Are we finished evolving?

this.mutationRate = m; // Mutation rate

// this.perfectScore = 1; // perfect score for now

this.data = myData;

// summation of benefits of all popuation

// used for prop calculation

Trang 16

Khoa Công Ngh Thông Tin ệ

15

// this.secondBestIndex = null;

// generate first random population

for (var i = 0; i < num; i++) {

this.population[i] = new DNA(this.data);

} };

// calculate fitness for all genes in the population

if (rand < population.fitness) { return population;

} rand -= population.fitness;

} };

Trang 17

Khoa Công Ngh Thông Tin ệ

for (; i < this.population.length; i++) { var partnerA = this.naturalSelection(); var partnerB = this.naturalSelection(); // do cross over

var child = null;

Trang 18

Khoa Công Ngh Thông Tin ệ

17

// add obtained child newPopulation[i] = child;

} // update the new generation this.population = newPopulation;

this.generations++; // update number of generation };

// get the best gene in this population

index2 = index1;

index1 = i;

worldrecord1 = this.population[i].fitness; } else if (this.population[i].fitness > worldrecord2) {

Trang 19

Khoa Công Ngh Thông Tin ệ

18

index2 = i;

worldrecord2 = this.population[i].fitness; }

this.secondBest = this.population[index2];

// check stop condition

if (this.isNintyPercentTheSame() || this.generations >= MAX_TO_STOP) {

this.finished = true;

} };

// check if finish condition is accomplished

Trang 20

Khoa Công Ngh Thông Tin ệ

"</div>");

} return everything;

};

this.isNintyPercentTheSame = function(arr) {

var arr = this.population;

var dupsCount = {};// , result = [];

var nintyPercentCount = arr.length * 9;

for (var i = 0; i < arr.length; i++) {

if (typeof dupsCount[arr[i].fitness] ==

"undefined") {

dupsCount[arr[i].fitness] = 0;

} else { dupsCount[arr[i].fitness]++;

} }

for ( var key in dupsCount) {

if (dupsCount[key] > nintyPercentCount) { return true;

// result.push(Number(key));

} }

Trang 21

Khoa Công Ngh Thông Tin ệ

// Check for the various File API support

if (window.File && window.FileReader && window.FileList && window.Blob) {

// Great success! All the File APIs are supported document.getElementById('files').addEventListener('change',

handleFileSelect, false);

// Setup the dnd listeners

var dropZone = document.getElementById('drop_zone');

Trang 22

Khoa Công Ngh Thông Tin ệ

Trang 23

Khoa Công Ngh Thông Tin ệ

Trang 24

Khoa Công Ngh Thông Tin ệ

for (var i = 1; i < lines.length; i++) {

var values = lines[i].split("\t");

Trang 25

Khoa Công Ngh Thông Tin ệ

24

createUserOptionPanel($("#mainPageInfoPanel")); // createNewDemo

createNewDemo();

});

// function to close or open left menu

function closeOpenLeftPanel() {

var leftPanelElement = $('#leftPanel');

// check status and open or close it

html += "<div class='settingsMenu' >";

html += "<div class='mainLable'>Settings</div>";

html += "<div class='elitism group'><div class='mainLable'>Use Elitism:</div>"

Trang 26

Khoa Công Ngh Thông Tin ệ

25

+ "<input type='radio' name='elitism' value='2' onclick='checkElitism(this.value)' checked><span>Yes (2)</span><br>"

+ "<input type='radio' name='elitism' value='0' onclick='checkElitism(this.value)'><span>No</span><br><br>

+ "<input type='radio' name='crossover' value='2'onclick='checkCrossover(this.value)'><span>random point</span><br>"

+ "<input type='radio' name='crossover' value='3'onclick='checkCrossover(this.value)'><span>uniform

Trang 27

Khoa Công Ngh Thông Tin ệ

var dataSizeHTML = $('<div class="row"><div class="lable" >Num Of Elements:</div><div class="numOfEleValue value"></div></div>');

var maxCapacityHTML = $('<div class="row"><div class="lable" >Max Capacity:</div><div class="maxCapValue value"></div></div>');

var button = $("<div class='button' onclick='runDemo()'><div class='lable'>Run</div></div>"); var firstPanel = $('<div class="leftUserOption"></div>'); firstPanel.append(dataInputHTML).append(dataSizeHTML).append(

maxCapacityHTML).append(button);

var SecondPanel = $('<div class="rightUserOption"></div>');

var generationSize = $('<div class="row"><div class="lable"

>Generatio Size:</div><div class="userInput value"><input type="number" name="generationSize" min="1" value="200" id="generationSize"

onchange="changeGenerationSize(this)"/></div></div>'); var mutationRate = $('<div class="row"><div class="lable"

>Mutation Rate:</div><div class="userInput value"><input

Ngày đăng: 26/04/2023, 10:35

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

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w