<< Вернуться на главную

Ядерный реактор(2013г)

ЯДЕРНЫЙ РЕАКТОР

Начинаем ежегодный конкурс программистов.

В этом году условия конкурса такие:
Имеется программная модель ядерного реактора, состоящего из 8 энергоблоков. Каждый блок управляется при помощи управляющего стержня. Необходимо написать программу управления реактором с таким расчетом, чтобы снять с реактора максимальную мощность (суммарная температура теплоносителя). Причем, в реакторе идут и случайные процессы, влияющие на распределение температур в отдельных блоках. Больше очков получит тот, кто сможет построить адаптивную систему автоматики управления реактором. Реактор управляется при помощи управляющей подпрограммы (R_UPR), в которой задается положение стержней (от 0 до 5). Пример: R_UPR(1,5); - блок 1, положение стержней 5(Максимально подняты). О состоянии реактора можно узнать по телеметрии, которая хранится в специальной структуре, доступной для чтения. В конкурсе победит тот, кто за 1000 циклов управления снимет с реактора максимальную мощность. Конкурс состоит из заочного и очного этапов. В ходе заочного - конкурсанты знакомятся с проблемой, пробуют различные стратегии управления и пишут себе домашние заготовки. На очном этапе условия слегка изменятся и конкурсантам придется за ограниченное время (4-ре часа) адаптировать свои программы под изменившиеся условия.

Традиционно,в нашем конкурсе будут 2-е номинации. Отдельно 8-9 классы и отдельно 10-11.

Все желающие принять участие в конкурсе регистрируются на сайте, скачивают предложенное ПО и работают, работают...
При регистрации необходимо заполнить все поля, если какиет-то данные отсутствуют, поставьте минус.

Кстати, на очном этапе условия будут изменены и за 4-ре часа необходимо будет переделать свою программу для получения большей эффективности (А то, вдруг, программу вы не сами писали?).

Игрушку с ручным управлением для вникания в проблему можно скачать здесь
Внимание! игрушка управляется следующим образом:
Стержни слегка "гуляют", но общий уровень можно установить движком внизу. но, ведь, вы, конечно, напишете более вразумительную программу, не так ли? :-).

Итак, приступаем собственно к заданию.

Для разных облочек программирования (C++BUIlDER, DELPHI2007, LAZARUS) мы подготовили проекты, в которых уже написана программа пользователя, Правда - простейшая, постоянное положение = 4 и все! Это "затравка" для вашей программы. В проекте специально выделена подпрограмма пользователя, которую вам и необходимо модифицировать. Остальные части проекта трогать нежелательно, во избежание потери работоспособности.

Для управления применяется подпрограмма M_UPR(N,ST);

N   - Номер Блока (от 1 до 8)
ST - положение стержня (если =0, то стержень опущен и раектор заглушен, если =5, то наоборот - дает максимальную мощность).

Учтите! Блоки обладают приличной инерцией. Вот если стержни мгновенно вытащить, то блоки наверняка взорвутся! А если потихоньку, ТО - МОЖНО :-)

И еще учтите, что стержни не могут двигаться мгновенно. Если , например, у вас положение стержня "0", и вы ставите их в положение "5", то это значит, что на первом ходу положение станет 1, вна втором 2 И.Т.Д Соответственно и быстро остановить блок не получится. Нужно управлять аккуратно. Кстсти разогрев одного блока приводит и к нагреванию соседних. Так что и это нужно учитывать.

Внимание! {Если параметры будут ошибочными, то последствия могут быть непредсказуемы!)

КОНТРОЛЬ

основные параметры реактора можно узнать из глобальной переменной.


                 Для LAZARUSA и DELPHI
****************************************************************
 T_BLOK=RECORD
   T:SINGLE;// Температура
   STER:BYTE;// положение стержня
 END;

 T_STRUK=PACKED RECORD
     KOL_HOD:INTEGER;// количество оставшихся ходов
     SCORE: SINGLE;  // достижения
     MR:PACKED ARRAY[1..8]OF T_BLOK;// Массив энергоблоков
    END;

                    для С++BUILDERA
****************************************************************

// ОПИСАНИЕ БЛОКА
struct T_BLOK
{
	
public:
	float T;
	Byte STER;
} ;


struct T_STRUK
{
	
public:
	int KOL_HOD;// количество оставшихся ходов
	float SCORE;// достижения
	T_BLOK MR[8];// Массив энергоблоков
} ;
//   ВНИМАНИЕ !!! ввиду известных особенностй
// реализации массивов на языке "С", нумерация в массивах "сдвинута"
// Так например параметры первого энергоблока лежат в 0-м элементе массива.

Например:
Текущая тампература 5-го энергоблока (на паскале) P^.MR[5].T
А на С P->MR[4].T

А здесь выложены готовые проекты, которые вам нужно будет подправить для достижения наибольшего результата. Учтите, что работать Можно на Си или Паскале
P.S. Результатом считается количество полученного тепла. Чем его больше, тем лучше!

Проект для Lazarus (Предпочитается)
Проект для C++BUILDER(CodeGear)
Проект для Delphi7(CodeGear)(не рекомендуется)

На очном этапе необходимо будет адаптировать свою программу под слегка измененные условия. Обещаем, что на очном этапе ожидаются сюрпризы! Но, я думаю, что для тех, кто напишет программу на заочном этапе и разберется во всем сам, ничего страшного не будет :-).

Очный этап состоится 08.01.13 в 11:00 (чтобы все выспавшиеся были :-) )

По результатам очного этапа будут вручены грамоты и призы.

На сегодня зарегистрировались: (модерируется 1-н раз в сутки)

Фамилия имя Школа класс Среда программирования Особые отметки
Мамчиц Николай Лицей 102 9в Lazarus
Иванов Данил Лицей 103 9кл Lazarus
Возисов Никита Лицей 102 9в Lazarus
Шаповалов Андрей СОШ 90 11кл Lazarus
Кулеш Николай СОШ 90 11кл Lazarus
Иванов Александр Гимназия 91 11кл Lazarus
Печеницын Иван МБОУ Лицей №102 11кл Lazarus
Кожанов Валерий Лицей 102 11кл Lazarus

По всем вопросам обращайтесь к администрации "Звездного Мира" через систему

Вопрос-ответ.

или по почте