Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,027

HOME > PHP > PHP Forum > ขอสอบถามเรื่่อง genetic algorithm เกี่ยวกับเรื่องการจัดตารางเรียนหน่อยค่ะ



 

ขอสอบถามเรื่่อง genetic algorithm เกี่ยวกับเรื่องการจัดตารางเรียนหน่อยค่ะ

 



Topic : 087506

Guest




หนูจะทำเรื่องเกี่ยวกับการจัดตารางเรียนค่ะ แล้วใช้วิธี genetic algorithm ค่ะ คือหนูต้องการให้เลือกแค่ผลลัพธ์อันที่ดีที่สุดค่ะ แต่ผลลัพธ์ที่ได้ข้อมูล เหมือนมีการบวกลบกันค่ะ หนูเขียนโค้ดตรงไหนผิดหรือเปล่าค่ะ ช่วยแนะนำหน่อยค่ะ

ข้อมูลที่ นำเข้า

Class group : 1
subject ID : 320
teacher name : 1
labroom Name :6601
Major Name : 1
Major year : 1
Duration : 3


Class group : 2
subject ID : 321
teacher name : 1
labroom Name :6602
Major Name : 2
Major year : 1
Duration : 3


ผลลัพธ์
Code
[class_group] => 0
[timeslot_no] => 1
[subject_id] => 321
[teacher_name] => 2
[major_year] => 6602
[major_name] => 2
[labroom_name] => 1
[duration] => 3


หน้าที่ส่งข้อมูล

Code (PHP)
<form name="form1" method="post" action="setsubj.php">
<table>
	<tr><td colspan="2" align="center"><b>Clss Schedule</b></td></tr>
	<tr><td colspan="2"></td></tr>
	<tr><td>year :</td><td><input type="text" name="year" value="" /></td></tr>
	<tr><td>semester :</td><td><input type="text" name="semester" value="" /></td></tr>
    </table>
    <br/>
    <br/>
    <table>
    <tr><td>Class group :</td><td><input type="text" name="class_group" value="" /></td></tr>
    <tr><td>subject ID :</td><td><input type="text" name="subject_id" value="" /></td></tr>
    <tr><td>teacher name :</td><td><input type="text" name="teacher_name" value="" /></td></tr>
	<tr><td>labroom Name :</td><td><input type="text" name="labroom_name" value="" /></td></tr>
    <tr><td>Major Name :</td><td><input type="text" name="major_name" value="" /></td></tr>
    <tr><td>Major year :</td><td><input type="text" name="major_year" value="" /></td></tr>
    <tr><td>Duration :</td><td><input type="text" name="Duration" value="" /></td></tr>
    </table>
    <br/>
    <br/>
    <table>
    <tr><td>Class group :</td><td><input type="text" name="class_group1" value="" /></td></tr>
    <tr><td>subject ID :</td><td><input type="text" name="subject_id1" value="" /></td></tr>
    <tr><td>teacher name :</td><td><input type="text" name="teacher_name1" value="" /></td></tr>
	<tr><td>labroom Name :</td><td><input type="text" name="labroom_name1" value="" /></td></tr>
    <tr><td>Major Name :</td><td><input type="text" name="major_name1" value="" /></td></tr>
    <tr><td>Major year :</td><td><input type="text" name="major_year1" value="" /></td></tr>
    <tr><td>Duration :</td><td><input type="text" name="duration1" value="" /></td></tr>
	<tr><td colspan="3" align="center"><input type="submit" name="submit" value="OK" /></td></tr>
	<tr><td></td></tr>
</table>
</form>

หน้าที่รับข้อมูล
<?php
require_once('algo.php');
class subj {
	var $class_group;
	var $timeslot_no;
	var $subject_id;
	var $teacher_name;
	var $major_year;
	var $major_name;
	var $labroom_name;
	var $duration;
		
	function subj ($class_group=0,$timeslot_no=0,$subject_id=0,$teacher_name=0,$major_year=0,$major_name=0,$labroom_name=0,$duration=0) {
		$this->class_group = $class_group;
		$this->timeslot_no = $timeslot_no;
		$this->subject_id = $subject_id;
		$this->teacher_name = $teacher_name;
		$this->major_year = $major_year;
		$this->major_name = $major_name;
		$this->labroom_name = $labroom_name;
		$this->duration= $duration;
	}
}
$year					= $_POST['year'];
$semester				= $_POST['semester'];

$class_group			= $_POST['$class_group'];
$subject_id 			= $_POST['subject_id'];
$teacher_name 			= $_POST['teacher_name'];
$labroom_name 			= $_POST['labroom_name'];
$major_name 			= $_POST['major_name'];
$major_year 			= $_POST['major_year'];
$duration				= $_POST['duration'];

$class_group1			=$_POST['$class_group1'];
$subject_id1 			= $_POST['subject_id1'];
$teacher_name1 			= $_POST['teacher_name1'];
$labroom_name1 			= $_POST['labroom_name1'];
$major_name1 			= $_POST['major_name1'];
$major_year1 			= $_POST['major_year1'];
$duration1				= $_POST['duration1'];


function inc($x) {
	return $x+1;
}

function avg($a,$b) {
	return round(($a+$b)/2);
}

function total($obj) {
	if ($obj1['timeslot_no'] == $obj2['timeslot_no']) {
			 $w=500;
			 	if($obj1['major_name'] == $obj2['major_name'] and $obj1['major_year'] == $obj2['major_year']){
				 $w = $w+500;
				 return $w;		 
				} else if($obj1['teacher_name']== $obj2['teacher_name']){
					$w = $w+500;
					return $w;
				} else if($obj1['labroom_name'] == $obj2['labroom_name']){
					$w = $w+500;
					return $obj;
				} else {
					$w=0;
					return $w;
			}
	} else {
		 $w=0;
		return $w;
	} 
	
}

$chro1 = new subj($class_group,$timeslot_no=1,$subject_id,$teacher_name,$labroom_name,$major_name,$major_year,$duration);
$chro2 = new subj($class_group1,$timeslot_no=1,$subject_id1,$teacher_name1,$labroom_name1,$major_name1,$major_year1,$duration1);

$algo = new algo();

$algo->population = array($chro1,$chro2);

$algo->fitness_function = 'total';	
$algo->num_couples = 1;				
$algo->death_rate = 0;				
$algo->generations = 100;				
$algo->crossover_functions = 'avg';   
$algo->mutation_function = 'inc';		
$algo->mutation_rate = 10;			
$algo->evolve();						
debug($algo->population);
debug(algo::select($algo->population,'total',1));

หน้าของ algorithm
class algo {
	
	var $population;		
	var $fitness_function;		
	var $crossover_functions;	
	var $mutation_function;		
	var $mutation_rate;			
	var $generations;			
	var $num_couples;			
	var $death_rate;			

	function crossover($parent1,$parent2,$cross_functions) {
		$class = get_class($parent1);
		if ($class != get_class($parent2)) return false;
		if (!is_array($cross_functions)) {
			$cross_function = $cross_functions;
			$cross_functions = array();
		}
		$child = new $class();
		$properties = get_object_vars($parent1);
		foreach ($properties as $propertie => $value) {
			if ($cross_function) $cross_functions[$propertie] = $cross_function;
			if (function_exists($cross_functions[$propertie]))
				$child->$propertie = $cross_functions[$propertie]($parent1->$propertie,$parent2->$propertie);
		}
		return $child;
	}

	function mutate(&$object,$mutation_function) {
		$properties = get_object_vars($object);
		foreach ($properties as $propertie => $value) {
				$object->$propertie = $mutation_function($object->$propertie);
		}
	}
	
	
	function fitness($object,$fitness_function) {
		
	return $fitness_function($object);
	}
	
		
	
	function best($a,$b) {
		$max=$a;   
	if ($b[1] > $a[1]){
		$max=$b;
		return $max;}
		else{
			
    return $max;}
    }


	function select($objects,$fitness_function,$n=2) {
		foreach ($objects as $object) {
		$selection[] = array($object,$fitness_function($object));
		}
		usort($selection,array("algo", "best"));
		$selection = array_slice($selection,0,$n);
		foreach ($selection as $selected) {
			$winners[] = $selected[0];
		}
		return $winners;
	}
	
	
	function worst($a, $b) {  
		$min=$a; 
   		if ($b[1] < $a[1]) {
			$max=$b;
		return $min;}
			else{
		return $min;}
    }

	function kill(&$objects,$fitness_function,$n=2) {
		foreach ($objects as $object) {
			$selection[] = array($object,$fitness_function($object));
		}
		usort($selection,array("algo", "worst"));
		$selection = array_slice($selection,0,count($selection)-$n);
		$objects = array();
		foreach ($selection as $selected) {
			$objects[] = $selected[0];
		}
	}
	
	
	function mass_crossover($objects,$cross_functions) {
		foreach ($objects as $object) {
			if (!$obj1) $obj1 = $object;
			else {
				$children[] = $this->crossover($obj1,$object,$this->crossover_functions);
				$obj1 = null;
			}
		}
		return $children;
	}

	
	function mass_mutation(&$objects) {
		foreach($objects as $key => $object) {
			if (rand(1,100) <= $this->mutation_rate) $this->mutate($objects[$key],$this->mutation_function);
		}
	}

	function evolve() {
		for ($i=0;$i<$this->generations;$i++) {
			$couples = $this->select($this->population,$this->fitness_function,2*min($this->num_couples,floor(count($this->population)/2)));
			$children = $this->mass_crossover($couples,$this->crossover_functions);
			$this->mass_mutation($children);
			$this->population = array_merge($this->population,$children);
			$this->kill($this->population,$this->fitness_function,min($this->death_rate,count($this->population)-2));
		}
	}
}




Tag : PHP, MySQL, CakePHP







Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2012-12-01 23:58:40 By : nok View : 1446 Reply : 1
 

 

No. 1



โพสกระทู้ ( 74,058 )
บทความ ( 838 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter Facebook

Code เยอะไล่ดูยากน่ะครับ






แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2012-12-02 08:21:44 By : mr.win
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : ขอสอบถามเรื่่อง genetic algorithm เกี่ยวกับเรื่องการจัดตารางเรียนหน่อยค่ะ
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: นำเข้าสินค้าจากจีน, Taobao, เฟอร์นิเจอร์, ของพรีเมี่ยม, ร่ม, ปากกา, power bank, แฟลชไดร์ฟ, กระบอกน้ำ

Load balance : Server 00
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2024 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่