CakePHP: взаимодействие между различными файлами / классами - PullRequest
2 голосов
/ 07 января 2011

Я клонирую коммерческую систему управления студентами. Студенты используют внешний интерфейс для подачи заявок на лекции, сотрудники университета могут изменять события (время, помещение и т. Д.). Ядром приложения будет алгоритм, который распределяет места среди студентов. Я уже спрашивал об этом здесь: Как реализовать алгоритм распределения мест для лекций

Теперь я нашел класс для этого алгоритма здесь: http://www.phpclasses.org/browse/file/10779.html

Я поместил «класс GA» в приложение / вендоров. Мне нужно написать «решение класса», которое представляет один объект (дочерний, а затем родительский для эволюционного процесса).

Мне также придется написать функции mutate (), crossover () и fitness (). пригодность рассчитывает оценку решения, основываясь на том, есть ли переподготовленные курсы и т.д .; crossover () - это безумная функция секса обезьяны, которая производит ребенка от двух родителей, а mutate () изменяет ребенка после кроссовера.

Теперь функция fitness () должна получить доступ к нескольким связанным моделям и их функциям find (). Он оценивает пригодность решения, проверяя, например, если есть перебронированные курсы или невыполненные пожелания, и штрафуется за это.

Где бы я поместил ga.php, solution.php и три функции? ga.php должен получить доступ к функциям, но функции должны получить доступ к моделям. Я также не хочу вызывать какие-либо App :: import () из функции fitness () - потому что при запуске алгоритма она вызывается много тысяч раз.

Надеюсь, кто-нибудь может мне помочь. Заранее спасибо =)

1 Ответ

0 голосов
/ 27 марта 2011

Вы используете PHP5?Если так, то почему бы не сделать что-то подобное внутри функции fitness ():

if (!class_exists('GA', false)) App::import('Vendor', 'GA');

Таким образом, App :: import вызывается только при необходимости.

* Кстати, есликласс называется GA (все заглавные), вы должны переименовать файл, содержащий его, в g_a.php, чтобы следовать соглашениям Cake. *

...