BÁNH XE ROULETTE

Một phần của tài liệu CƠ SỞ TOÁN HỌC CỦA GT GEN (Trang 71 - 73)

IV/ HIỆN THỰC CHƯƠNG TRÌNH DƯỚI DẠNG MÁY HỮU HẠN TRẠNG THÁI 4.1 KHAI BÁO DỮ LIỆU

4.1.1. BÁNH XE ROULETTE

Giải thuật Gene chọn các yếu tố theo xác suất, thí dụ chọn cá thể, phép toán sản sinh ... - thông qua khái niệm bánh xe roulette (bánh xe roulette dùng quay số trong môn cờ bạc). Con xúc sắc dùng để gieo được hiện thực bởi class RandDev, bánh xe tương ứng với class RouletteWheel ở dạng template.

// --- // class tạo số ngẫu nhiên // --- class RandDev

{

protected:

// đối số seed ngầm định được chọn bởi đồng hồ hệ thống. static long TimeSeed()

{

return (long)time(NULL); }

public:

// constructor

RandDev (long initSeed = TimeSeed()); // xác lập giá trị seed

void SetSeed(long initSeed=TimeSeed());

// toán tử tạo giá trị ngẫu nhiên nằm giữa 0.0 và 1.0 float operator()();

private:

long Seed; // Giá trị khởi tạo ban đầu của dãy số ngẫu nhiên };

Mỗi đối tượng thuộc lớp RandDev sẽ tương ứng với một chương trình tạo số ngẫu nhiên nằm giữa 0.0 và 1.0 (thực hiện thông qua toán tử ( )) . Thí dụ:

RandDev G;

Để tạo số ngẫu nhiên chỉ việc gọi toán tử (): G();

// --- // class hiện thực bánh xe roulette ở dạng template // --- template <class FType>

class RouletteWheel {

public:

// constructor

RouletteWheel(size_t sz, FType *weights=NULL); // copy constructor

RouletteWheel(const RouletteWheel &rw); // toán tử gán

void operator =(const RouletteWheel &rw); // destructor

~RouletteWheel();

// thay đổi trọng số của bánh xe roulette FType Change(size_t i, FType weight); // các hàm truy xuất thành phần

size_t GetSize() {return N;} float GetWeight(size_t i);

// nhận một chỉ số mang tính ngẫu nhiên size_t GetIndex();

protected:

// mảng các trọng số (tương ứng với số phần chia và kích thước // mỗi phần trên bề mặt bánh xe roulette

size_t N; FType * W; // tổng các trọng số của bánh xe roulette FType T; // "xúc sắc" RandDev G; private:

// các hàm sử dụng bên trong các hàm thành phần public float AbsVal(FType f)

if (f<0.0F) return -f; else

return f; }

void Copy(const RouletteWheel &rw); };

Mỗi đối tượng RouletteWheel đều có một biến thành phần thuộc class RandDev dùng để chọn một phân vùng trên bánh xe roulette. Khai báo đối tượng của class này bởi constructor thường kèm theo các đối số xác định mảng tương ứng:

Thí dụ, tạo bánh xe roulette chọn một trong năm phép toán sinh sản:

Double operarr[5];

RouletteWheel<double> operwhl(5, operarr);

Một phần của tài liệu CƠ SỞ TOÁN HỌC CỦA GT GEN (Trang 71 - 73)

Tải bản đầy đủ (DOCX)

(82 trang)
w