/** * 計算課表 */ public static function caculate($param) { // 設定執行時間 set_time_limit(60); // 產生教室使用時間,提供排課使用 $classroom = Classroom::all(); foreach ($classroom as $classroomItem) { $GLOBALS['classroomCourseTime'][$classroomItem->classroom_id] = str_replace('1', $classroomItem->count, $classroomItem->course_time); } // 取得教師排課需求,計算適應值用 $teacher = Teacher::where('course_time', '<>', str_repeat(0, 35))->get(); foreach ($teacher as $teacherItem) { $GLOBALS['teacherRequire'][$teacherItem->teacher_id]['require'] = $teacherItem->course_time; $GLOBALS['teacherRequire'][$teacherItem->teacher_id]['classes_id'] = $teacherItem->classes_id; if ($teacherItem->classes_id != 0) { $GLOBALS['teacherRequire'][$teacherItem->teacher_id]['courseTime'] = $teacherItem->classes->year->course_time; } } // 產生課表,速度、計算適應值 $seed = self::_generateSeed($param['seedCount']); // 發生錯誤,回傳錯誤結果 if ($seed[0] == 'error') { return $seed; } // 進行粒子最佳化計算 $seedProgressHistory = array(); $extinctionTimes = 1; while ($param['extinctionCount'] > 0) { $withoutProgressCount = 0; $bestSeed = self::_getBestSeed($seed); $seedProgressHistory[] = number_format($bestSeed['fitness'], 2, '.', ''); while ($withoutProgressCount < $param['executeCount']) { // 更新種子速度 self::_updateSeedV($seed, $bestSeed); // 依照速度更新課表排課、計算適應值 $seed = self::_updateSeed($seed); // 取得新的全域最佳值 $newBestSeed = self::_getBestSeed($seed); // 判斷是否改進 if ($bestSeed['fitness'] < $newBestSeed['fitness']) { $bestSeed = $newBestSeed; $withoutProgressCount = 0; $seedProgressHistory[] = number_format($bestSeed['fitness'], 2, '.', '') . '<sup class="progross"> 改進</sup>'; } else { $withoutProgressCount++; $seedProgressHistory[] = number_format($bestSeed['fitness'], 2, '.', ''); } } // 進行判斷是否改進毀滅結果 if (!isset($historyBestSeed) || $historyBestSeed['fitness'] < $bestSeed['fitness']) { $historyBestSeed = $bestSeed; } $seedProgressHistory[] = '<strong>' . number_format($historyBestSeed['fitness'], 2, '.', '') . '<sup> 全域最佳</sup></strong>'; $seedProgressHistory[] = 'Extinction ' . $extinctionTimes; $param['extinctionCount']--; $extinctionTimes++; } file_put_contents(storage_path() . '\\result.json', json_encode($historyBestSeed['timetable'])); return $seedProgressHistory; }
/** * @before _secure, _school */ public function manage($grade_id) { $grade = \Grade::first(array("id = ?" => $grade_id), array("title", "id", "organization_id")); if (!$grade || $grade->organization_id != $this->organization->id) { self::redirect("/school"); } $this->setSEO(array("title" => "Manage Sections | School")); $view = $this->getActionView(); $classrooms = \Classroom::all(array("grade_id = ?" => $grade_id)); $view->set("grade", $grade); $view->set("classrooms", $classrooms); }
public function getRoomSchedule() { $NOW = new DateTime(); $EPOCH = new DateTime('1970-01-01 00:00:00'); $room = Input::get('room'); $startdate = Input::get('startdate', $EPOCH->format('Y-m-d H:i:s')); //$starttime = Input::get('starttime', $EPOCH->format('H:i:s')); $enddate = Input::get('enddate', $NOW->format('Y-m-d H:i:s')); //$endtime = Input::get('endtime', $NOW->format('H:i:s')); $roomNumber = Input::get('room', 'all'); $jsonpCallback = Input::get('callback', ''); $startTimestamp = strtotime($startdate); $endTimestamp = strtotime($enddate); if ($roomNumber == 'all') { $events = Classroom::all(); } else { $events = $this->getEventsForRoom($roomNumber); } $returnEvents = array(); foreach ($events as $event) { if ($event->RecurrenceRule !== "") { $instance = $this->parseEvent($event); $eventsArray = $this->expandEvents($instance, $startTimestamp, $endTimestamp); foreach ($eventsArray as $singleEvent) { array_push($returnEvents, $singleEvent); } } else { if ($startTimestamp <= strtotime($event->Start) && $endTimestamp >= strtotime($event->End)) { $nonRecurEvent = $this->formatEvent($event); array_push($returnEvents, $nonRecurEvent); } } } //Check to see if the result should be jsonp if ($jsonpCallback !== '') { return Response::json($returnEvents)->setCallback($jsonpCallback); } else { return json_encode($returnEvents); } }
public function getIndex() { $theArray = Classroom::all(); $jsonArray = $theArray->toJson(); return $jsonArray; }