f Регатная комп. программа
Гонки и путешествия под парусом
Новости Регаты Рулевые Форум Видео Фотоконкурс Справочник

Автор Тема: Регатная комп. программа  (Прочитано 15230 раз)

0 Пользователей и 1 Гость смотрят эту тему.

ЗАК

  • Сообщений: 3441
  • Уважуха: +342/-129
  • Андрей Зворыкин М54
Регатная комп. программа
« : 13 Марта, 2010, 22:08:10 »
Заканчиваю изготовление регатной программы, способной обеспечить благие пожелания, записанные в Уставе СВОКЛы.

Постарался сделать программу с простым интерфейсом и чтобы себестоимость собственно программы не вылезла тыщь за 50р.

Для работы с таблицами данных использована свободно распространяемая программа Григория Жмулевского ТаблицаПро (TablePro), сайт http://zgsprojects.narod.ru . Эта программа используется и как плагин, вызываемый моей прогой, и в автономе для просмотра, печати и конвертации итоговых таблиц в разные форматы (xls, doc, ...).

Отличия от известной программы SailRaces такие:
- Простота интерфейса.
- Возможен ввод обмера и расчет гандикапа. Объем обмерной информации зависит от применяемого гандикапа.
- Разбиение на зачетные группы происходит после ввода информации об участниках, принципы разбиения многовариантны.
- Возможно изменение в разных гонках обмера (площади осн. и доп. парусов, веса экипажа и, стало быть - гоночного балла).
- Программа способна правильно обрабатывать специальные ситуации, когда зачетная группа идет по единой дистанции не во всех гонках, а только в части их.
- Поддерживаются две системы зачета: Исафовская пропорциональная (по очкам) и по рейтингу экипажей, оцениваемому по результатам гонок. Рейтинг экипажей имеет тот же смысл, что и гоночный балл лодок - "скоростной потенциал".
----
Разбиеие на зачетные группы происходит так: таблица "нормального обмера" сортируется по возрастанию (убыванию) выбранной характеристики (площади парусов, гоночному баллу, длине, ...). Для этого достаточно щелкнуть мышом по названию столбца выбранной характеристики. После этого для первых членов групп (подгрупп) указывается название (или номер) группы (подгруппы). Остальным участникам принадлежность к группам будет прописана автоматом (в гонках обмер в части парусов может меняться, но разбиение на группы остается постоянным).

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

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

В общем, работа с программой выглядит так: жмешь на кнопку в окне диалога и работаешь с появившейся на экране таблицей.

На картинках изображены: окно главного диалога, таблица информации об участниках, таблица указания зачетных групп и таблица результата по зачетной группе. В таблице зачетных групп участники отсортированы по ГБ, соответствующему "нормальному" обмеру.

Картинка результата вне связи с предыдущими, задача считалась по др. гандикапу.
« Последнее редактирование: 13 Марта, 2010, 22:27:06 от ЗАК »
"Один ишак ишол, второй ишак ишол и третий ишак ишол и весь караван ишол"

ЗАК

  • Сообщений: 3441
  • Уважуха: +342/-129
  • Андрей Зворыкин М54
Re: Регатная комп. программа
« Ответ #1 : 22 Марта, 2010, 03:22:03 »
Объем исходного текста программы перевалил хорошо за тыщу строк и пора прекратить это программерское безумие. Вот и прекращаю, тем паче, что обширного рынка (бесплатного) сбыта ожидать не приходится. Разве только добавлю экспорт статистики в формате стат. пакета для анализа эффективности гандикапов.

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

Программа создает отдельные итоговые таблицы для групп и "подгрупп". Названия этих таблиц получаются сцеплением названия примененного в групе гандикапа и названия группы. Например," IOMR-группа [Все вдруг]", "Marr2-группа [Kороткие]", "TR-группа [13 кв.м]". Это накладывает ограничение на применение символов в названиях групп  - не все допустимы в именах файлов. Например, нельзя использовать угловые скобки "<",  ">".

На последней картинке таблица параметров для корпусов разных типов. Она появляется по кнопке в окне главного диалога (правой верхней). Данные из этой таблицы используются, в частности, для назначения обмерных характеристик "по умолчанию", если они не заданы в таблице обмеров участников.  Это касается длины по ВЛ и диаметра баллонов (ширины по ВЛ - для жестких корпусов, диаметра нижнего "ствола" - для двустволок). Таблицу можно редактировать и дополнять. Те значения, что счаз - не то, чтобы совсем от фонаря, но отчасти.
« Последнее редактирование: 22 Марта, 2010, 03:48:34 от ЗАК »
"Один ишак ишол, второй ишак ишол и третий ишак ишол и весь караван ишол"

Тюлень

  • Сообщений: 446
  • Уважуха: +10/-12
  • Дмитрий СП 105
Re: Регатная комп. программа
« Ответ #2 : 23 Марта, 2010, 10:40:02 »
1. А какой гандикап на куликовские баллоны? Ну тот, что ты обсчитывал для Онежского ралли? Он тут предусмотрен, или ввод с клавиш?
2. У меня в одной группе пойдут куликовские каты и тримы (ну прям Кубок Америки). Это прога может учесть?

ЗАК

  • Сообщений: 3441
  • Уважуха: +342/-129
  • Андрей Зворыкин М54
Re: Регатная комп. программа
« Ответ #3 : 29 Марта, 2010, 06:16:14 »
1. А какой гандикап на куликовские баллоны? Ну тот, что ты обсчитывал для Онежского ралли? Он тут предусмотрен, или ввод с клавиш?
2. У меня в одной группе пойдут куликовские каты и тримы (ну прям Кубок Америки). Это прога может учесть?

А никаго специального гандикапа на Кулик-баллоны нет. Просто надо правильно указывать их (маленькую) длину по ВЛ и (большой) диаметр. Возможно, еще кое-что уточницца в смысле влияния тупой ватерлинии, когда Лоцмана за ноздрю потаскаем. Проге все это по барабану, параметры гандикапных формул она берет из внешней таблицы. Так что качество гандикапирования Куликов зависит от того, что в таблице, а это зависит от наличия данных по Куликам - и буксировочных, и по рез. гонок. Т.е., в конечном счете, от энтуазизма владельцев в смысле поставки этих данных.

С тримаранами дело темное, их в гонках мало (1).  Попытай сибирцев, как они сравнительно с катамаранами ездят. Я пока склоняюсь к тому, что делают в МОCRA: длину для расчета гандикапа берут по аутригеру, но если он короче, чем 0.8 длины главного, то берут 0.8 длины главного.
--

Кроме отдельных итоговых таблиц по зачетным группам и подгруппам в формате ТаблицаПро, программа генерит сводный документ по всем группам для вывешивания в тырнете (файл в формате HTM). Состав полей таблиц в этом документе можно устанавливать индивидуально для каждой зачетной группы (подгруппы). Жаль только, что этот форум НТМ-файлы в качестве вложений не жрет, надо паковать и вывешивать архив (как Бортмеханик делал с КТ-09). На картинках диалог определения состава полей таблицы для одной из групп и копии окна браузера, коим просматривается выходной HTM-файл.
« Последнее редактирование: 29 Марта, 2010, 06:27:44 от ЗАК »
"Один ишак ишол, второй ишак ишол и третий ишак ишол и весь караван ишол"

ЗАК

  • Сообщений: 3441
  • Уважуха: +342/-129
  • Андрей Зворыкин М54
Re: Регатная комп. программа
« Ответ #4 : 05 Апреля, 2010, 04:28:39 »
Отрешившись на время и посмотрев отрешенным взглядом на плод творенья, заметил, что забыл вставить в web-страницу  (HTM-филе) описание дистанций. Тут я як та баба, шо купила порося: допустил движение зачетной группы по разным дистанциям в части гонок и от того имею теперь хлопот. Уже нельзя запхать описание дистанции в шапку гонки (как в СейлРейсинге), посколь дистанций в гонке может быть больше одной. Куда их девать?

И в связи с вышеизложенным надо добавить в итоговую таблицу столбец  со ссылкой на дистанцию, по которой ехал участник в данной гонке.  Таблица растопыривается в ширину (ширина динамическая, от числа гонок и проч.). Надо ли писать что-то разное в один столбец, как в СейлРейсинге - СТ и ЕТ одно под другим ради экономии ширины? Мне так не нравится, но пока эта срочно освоенная и не сильно нужная в мирной жизни матерщина (НТМLэнгвидж)  из башки обратно не вылетела - могу переделать свой генератор НТМL-кода. ??  Надо ли отменить запрет переноса в столбце "команда", чтоб на случай длинного списка членов они писались в несколько строк, но с малой шириной столбца? Тут такая неприятность, что если введен пробел между фамилией и инициялами, то возможен перенос как раз по такому пробелу - некрасиво.
« Последнее редактирование: 05 Апреля, 2010, 04:44:52 от ЗАК »
"Один ишак ишол, второй ишак ишол и третий ишак ишол и весь караван ишол"

Nnnnnnn

  • Сообщений: 3318
  • Уважуха: +113/-69
  • Тип: пешеход
Re: Регатная комп. программа
« Ответ #5 : 05 Апреля, 2010, 09:54:05 »
Надо ли писать что-то разное в один столбец, как в СейлРейсинге - СТ и ЕТ одно под другим ради экономии ширины? Мне так не нравится
Мне, в общем, тоже. ИМХО, лучше отдельные столбцы.

ЗАК

  • Сообщений: 3441
  • Уважуха: +342/-129
  • Андрей Зворыкин М54
Re: Регатная комп. программа
« Ответ #6 : 06 Апреля, 2010, 01:19:02 »
Ну и ладушки - "баба с возу - кобыле легче" (не запутаться бы, кто я - баба, порося или уже кобыла). пусть все будет в отдельных столбцах.

Автоперенос в столбце "команда" разрешу. Чтоб члены команды не рвались на части, можно писать А.Зворыкин (без пробела), а не Зворыкин А. Тогда ширина этого столбца определится по самому длинному имени участника. В остальных текстовых столбцах перенос пусь будет запрещен. (Я уделяю столько внимания этой малозанимательной теме ради того, чтоб не было срамоты, как в офиц. итоговой табле ВВР-09, см копию страницы сайта ВВР. Этакую чучу сгенерил <meta name="Generator" content="Microsoft Excel 10">. Может, и секретарша чего начудила, разобраться в порожденном Экселью коде трудно из-за бешеного объема)

С описанием дистанций, пожалуй, так. Дам общую (сквозную) нумерацию дистанций (оператор может вводить номера дистанций в таблицах гонок как угодно, напр. - начиная в каждой гонке с "1"). Эта сквозная нумерация используется в отдельной таблице описаний дистанций на итоговой веб-странице.  В таблицах итогов гонок добавится стобец ссылки на таблицу дистанций по сквозному номеру. Агы?
"Один ишак ишол, второй ишак ишол и третий ишак ишол и весь караван ишол"

ЗАК

  • Сообщений: 3441
  • Уважуха: +342/-129
  • Андрей Зворыкин М54
Re: Регатная комп. программа
« Ответ #7 : 09 Апреля, 2010, 07:23:13 »
Ну, в общем, готово. Дальше можно совершенствовать до потери пульса. Чего не хватает по сравнению с последней версией СейлРейсинг? Только комп. фиксации финиша. Формально, для отмазки, это сделать не сложно, но надо обдумать - как, чтобы было удобно с учетом одновременных или почти одновременных финишей, когда у оператора не будет времени гонять указатель по списку участников. Как сделано в СейлРейсинг - не знаю, свалил программу и обплевался раньше, чем дошел до (возможно, у меня комп. кретинизм).

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

В общем, ограничения такие:
№ на парусе - 12 симв.
Название лодки - 24 симв.
Список членов команды -64 симв.
Число участников (команд) - 100 штук.
Число гонок - 10
число зачетов - 50

Так и спрашиваю, надо ли где чего увеличить?


« Последнее редактирование: 10 Апреля, 2010, 02:59:43 от ЗАК »
"Один ишак ишол, второй ишак ишол и третий ишак ишол и весь караван ишол"

Velsky

  • Администратор
  • Сообщений: 3688
  • Уважуха: +166/-83
  • Тип: Микро
  • Номер: RUS 35
Re: Регатная комп. программа
« Ответ #8 : 09 Апреля, 2010, 10:05:08 »
Я бы увеличил название, список и число гонок

ЗАК

  • Сообщений: 3441
  • Уважуха: +342/-129
  • Андрей Зворыкин М54
Re: Регатная комп. программа
« Ответ #9 : 10 Апреля, 2010, 04:38:41 »
Спасибо, хорошо, сейчас сделаю.

О рейтингах (квалификациях) участников - что это такое в понимании этой программы? Смысл этих величин тот же, что и у рейтингов лодок - "скоростной потенциал" или относительная скорость. Что является единичным эталоном, относительно которого эта скорость? Некий общий "центр". Это не среднее арифметическое, оно слишком чувствительно к выбросам. Точнее писать долго, потом.

Эти рейтинги-квалификации оцениваются только в случае хронометрируемых гонок, для по-приходных - нет.
Они находятся, как решения системы уравнений вида
        r(i)*et(i,j) = c(j)/q(i),  i=1,..m  j=1,...n.
Система решается относительно неизвестных к-тов дистанций с(j) и рейтингов q(i). По i индексированы участники, по j - дистанции, m - число участников,  n - число дистанций. Имеет место неопределенность масштаба - любое решение можно изменить, пропорционально изменив значения с и q и это тоже будет решением. По этому накладывается дополнительное условие на "центр" квалификаций, снимающее неопределенность.

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

Полученные оценки рейтингов назовем "математическими", они получены только по тем гонкам, в которых клиент получил зачет. Гонки, в кторых н/ф, н/с и проч. - уравнений не доставляют. Итог же подводится по "юридическим" рейтингам. При их вычислении учитываются  и те гонки, в которых зачета не было. В таких гонках участнику приписывается нулевой частный (для этой гонки) рейтинг и эти нули учитываются при расчете "центра" - окончательного "юридического" рейтинга, который и фигурирует (если не заглушен оператором) в итоговой таблице. Не очень строго (я опустил нормализующее преобразование системы), но примерно так.

Зачет по рейтингам отличается от зачета по очкам в первую очередь тем, что совершенно не чувствителен к числу мертвых и полумертвых душ, которое может существенно влиять на зачет по очкам. Низка чувствительность к провалам в отдельной гонке, из-за которых существует практика отбрасывания худших гонок. Смысла их отбрасывать при зачете по рейтингу нет совсем. (Да и при зачете по очкам при наличии полумертвых душ отбрасывание может привести к чудесам, но это отдельная тема.)
« Последнее редактирование: 10 Апреля, 2010, 04:40:27 от ЗАК »
"Один ишак ишол, второй ишак ишол и третий ишак ишол и весь караван ишол"