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

РОБОМЕХ

И опять начинаем традиционный конкурс программистов.

В этом году "легенда" будет такая:

Сбылась вековая мечта человечества! Построен завод совершенно без людей. Роботы делают все, остается только пользоваться готовой продукцией. Завод производит сотовые телефоны в огромных количествах.

Всего на заводе 8 цехов, в каждом из которых производится некоторая операция: первый цех штампует корпуса и передает корпуса в седьмой (на сборку) второй делает печатные платы и передает платы в третий третий паяет детали на платы и передает готовые платы в четвертый четвертый тестирует полученные платы и передает платы в седьмой (на сборку) пятый делает батареи питания и передает заготовки в шестой шестой эти батареи заливает в пластик и передает в седьмой (на сборку) седьмой (самый главный) - сборочный собирает телефоны из полученных деталей восьмой проводит заключительное тестирование собранных в седьмом телефонов

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

Вот такой техпроцесс.

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

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

Производство разбито на циклы, вы расставляете роботов и делаете цикл производства. Потом можете опять переставлять роботов и сделать новый цикл. Учтите, что операции выполняются не обязательно за один цикл, и если робот за цикл делает 2.5 операции, и вы его перебрасываете на новый участьк, то недоделанная деталь идет в брак. Тоесть если он поработает два цикла подряд то вы получите 5 деталей а если после первого цикла перебросите его в другой цех, то только 2-е!

Итак вы расставляете роботов и делаете один цикл. Ваша задача за 1000 циклов выпустить максимальное количество сотовых телефонов. Теоретически вы можете один раз расставить роботов по цехам и потом не менять их местами. Программа получится очень простая, но в таком случае завод будет работать неритмично, корпусов наштампуют кучу, а плат будет нехватать. Ну а сборка возможно только если все что надо доставлено в сборочный цех.

Для управления есть только одна подпрограмма

MOV_ROB(Nробота,Mцеха:BYTE);// передвинуть робота номер "N" в цех номер "M"

Анализировать работу завода вы можете при помощи подпрограммы

M_GET(NC:BYTE;VAR IN1,IN2,IN3,OUT1:INTEGER);

Подпрограмма возвращает вам параметры одного цеха (NC).
IN1,IN2,IN3 - заготовки на входе в цех.
OUT1 - количество изготовленных цехом деталей.

В начале каждого производственного цикла программа переписывает детали в заготовки следующего цеха и имитирует работу всех цехов.

Соответственно за каждый выпущенный сотовый телефон вы получаете очки. Тот кто наберет максимальное количество очков и станет победителем. По завершению работы вам будут начислены дополнительные баллы по результатам недоделаных операций (но это будет не дробное число меньше еденицы)

Игрушку с ручным управлением для ознакомления можно скачать тут.

В игрушке можно расставить роботов по цехам, и нажав "пуск" посмотреть что получится.

Схема производства выглядит примерно так:

Задача конкурса - за 1000 ходов обеспечить максимальное количество очков (Собранных телефонов).

Как всегда за месяц предлагается освоить управление, попробовать максимально улучшить показатели, наработать полезные подпрограммы (можно конечно ничего не делать если вас не интересует результат :-) ). Ну а на очном этапе милости просим в СЮТ с готовыми исходниками и собственными идеями. Обещаем как минимум усложнить жизнь. Управление производством совсем не простая задача. Уверен что и конкурсанты справятся. Просто кто-то очков поменьше получит а кто-то побольше, вот и определится победитель

В конкурсе будет поддержано несколько оболочек и языков программирования . В зависимости от того какая оболочка вам более комфортна вы можете выбрать то что вам ближе. А почему именно такой выбор? Да просто потому, что именно эти оболочки официально куплены нами в СЮТ. А значит, на очном этапе вы можете выбрать любую из этих оболочек. Если у вас другие версии, то вы можете адаптировать проект под вашу оболочку. Это легко делается, потому что основные функции вынесены в DLL. Но учтите, что на очном этапе мы можем обеспечить вам только указанные версии! Впрочем вы можете прийти и со своим ноутбуком, если вас не устраивают наши средства. Игра написана так, что от производительности компьютера она совершенно не зависит.

Для участия в конкурсе качаете готовую затравку
Версия для LAZARUSа.
Версия для С++BUILDER9.

Качаете подходящий вам проект, распаковываете его, и смотрите. Там есть подпрограмма пользователя (HOD), которая вызывается 1000 раз по мере выполнения программы. Вот в идеале вы можете править только ее. Желательно в другие места затравок не лазить, а то может проект рассыпасться! Хотя если очень хочется, и вы понимаете что там делается..... Например, можно добавить дополнительные глобальные переменные (они вам наверняка понадобятся).

А вот например с подпрограммой "M_OTRIS" при желании можно и поэкспериментировать. Если у вас очень медленный компютер, то можно вызывать отрисовку например раз в 10 ходов.

Ну а для того, чтобы вы могли как-то анализировать ситуацию предусмотрены информационные подпрограммы и функции
FUNCTION GETINFO:INTEGER; - Получить номер текущего хода
FUNCTION GET_SCORE:SINGLE; - Получить текущие параметры работы цеха (заготовки и продукция)
PROCEDURE M_GET(NС:BYTE;VAR IN1,IN2,IN3,OUT1:INTEGER); - получить скорости квадрокоптера "N"

Дерзайте, все в ваших руках и головах! Мало того, чтобы потом на очном этапе сюрпризов не случилось, нужно хорошенько погонять это ПО. Вдруг что-то работает не совсем так как заявлено. Пишите, ошибки подправим. На очном этапе все ошибки обзываются "багами" и исправлению не подлежат!

Месяц всем на ознакомление с задачей, наработки своих методик и подпрограмм, тестирование. А в новогодние каникулы (а конкретно 08.01.2017 (воскресенье), в 12:00 в кабинете 2-24 СЮТ) состоится очный этап.
Не забудьте перед тем как сесть за праздничный стол, заглянуть на сайт и поинтересоваться конкретно временем и датой. Вдруг что-то поменяется :-)

ВНИМАНИЕ!

Желающим принять участие в конкурсе очень желательно зарегистрироваться. Чтобы заранее "застолбить" место на очном этапе.
РЕГИСТРАЦИЯ

Учтите, если вы зарегистрировались, то сразу в таблице себя не увидите. Мы постараемся внести информацию в течении 2-х дней.

На сегодня зарегистрировались:

Фамилия и имя Школа Класс Предпочитаемая оболочка
Плавко Михаил КГБОУ ЖКК 10 Lazarus
Сивирин Владислав 102 11 Lazarus
Климов Иван 102 9 Lazarus
Керемецкий Артем 103 8 Lazarus
Пимонов Даниил 91 9 Lazarus
Кондратьев Константин 91 11 Lazarus

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

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

или по почте