Страница 8 из 19

Re: Программа для разведки

СообщениеДобавлено: 09 фев 2015, 21:51
AlexSpl
В процессе прохождения новогоднего турнира впервые столкнулся с неверным предсказанием пары навыков, предлагаемых при повышении уровня. Программа рассчитала, что выпадет пара (Wisdom 1; Estates 2). Каково же было моё удивление, когда на очередном левел-апе я получил пару (Wisdom 1; Scouting 2). Начал разбираться в причинах и выяснил, что следующий подход, призванный существенно уменьшить время построения дерева прокачки:

Цитата:
В новой версии программы LM Oracle используется более эффективный подход:

«выбираемый вторичный навык будет таким же, как если бы мы заменили выпавшую грань 201-гранного «кубика» остатком от деления её на сумму весов навыков-кандидатов, с одним лишь отличием: если остаток оказывается равным 0, выбирается последний навык из списка, а не первый».


не учитывает одну маленькую деталь.

Цитата:
... от выпавшей грани последовательно отнимаются веса навыков из списка кандидатов, пока разность не станет равна 0 или меньше. Навык, при вычитании веса которого разность становится равной 0 или отрицательному числу, выбирается в слот.


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

Рассмотрим ещё раз пример из статьи "Первичные и вторичные навыки"

Пусть теперь выпала грань 22.

Шаг 1
22 — 3 = 19 (вычли вес Logistics)
19 — 4 = 15 (вычли вес Scouting)
15 — 2 = 13 (вычли вес Diplomacy)
13 — 3 = 10 (вычли вес Navigation)
10 — 1 = 9 (вычли вес Wisdom)
9 — 1 = 8 (вычли вес Mysticism)
8 — 1 = 7 (вычли вес Eagle Eye)
7 — 2 = 5 (вычли вес Estates)

Список навыков кончился, начинаем отнимать снова с начала списка:

Шаг 2
5 — 3 = 2 (вычли вес Logistics)
2 — 4 = -2 (вычли вес Scouting)

Здесь сумма весов навыков-кандидатов равна 3 + 4 + 2 + 3 + 1 + 1 + 1 + 2 = 17, поэтому выпавшую грань 22 можно заменить на остаток от деления её на 17. Другими словами, мы сразу же переходим к шагу 2, пропуская шаг 1, чем существенно экономим на вычислениях. Если вместо грани 22 выпала бы грань 17, остаток оказался бы равен нулю, и мы, согласно оговорке "с одним лишь отличием...", выбрали бы последний навык из списка кандидатов, а не первый. Почему так? Смотрите сами:

17 - 3 = 14 (вычли вес Logistics)
14 - 4 = 10 (вычли вес Scouting)
10 - 2 = 8 (вычли вес Diplomacy)
8 - 3 = 5 (вычли вес Navigation)
5 - 1 = 4 (вычли вес Wisdom)
4 - 1 = 3 (вычли вес Mysticism)
3 - 1 = 2 (вычли вес Eagle Eye)
2 - 2 = 0 (вычли вес Estates)

При вычитании веса последнего навыка получили неположительное число, поэтому именно последний навык (Estates) выбирается в слот. Если заменить выпавшую грань игральной кости на остаток от деления её на сумму весов навыков-кандидатов, мы бы получили следующее:

0 - 3 = -3 (вычли вес Logistics)

и без оговорки должны были бы выбрать первый навык, что привело бы к ошибке. Теперь самое интересное :) Рассмотрим случай, когда выпадает грань 0. Мы по-прежнему имеем:

0 - 3 = -3 (вычли вес Logistics),

т.е. в слот отправляется Логистика, но, т.к. 0 mod 17 = 0, то программа вместо первого навыка отправляет в слот последний, что и приводит к ошибке.

* * *
Дима, замени, пожалуйста, в статье фразу

Цитата:
выбираемый вторичный навык будет таким же, как если бы мы заменили выпавшую грань 201-гранного «кубика» остатком от деления её на сумму весов навыков-кандидатов, с одним лишь отличием: если остаток оказывается равным 0, выбирается последний навык из списка, а не первый.


на

Цитата:
выбираемый вторичный навык будет таким же, как если бы мы заменили выпавшую грань 201-гранного «кубика» остатком от деления её на сумму весов навыков-кандидатов, с одним лишь отличием: если остаток оказывается равным 0, выбирается последний навык из списка, а не первый. Исключением является грань 0: при её выпадении всегда выбирается первый навык-кандидат.


P. S. Соответствующие исправления будут внесены в LM Oracle.

Re: Программа для разведки

СообщениеДобавлено: 09 фев 2015, 22:44
AlexSpl
LM Oracle 3.19.1.0 XE

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

[ HoMM II 2.1 RU ]
1. Исправлена ошибка в Level-Up Oracle, которая приводила к неправильному определению предлагаемых при повышении уровня вторичных навыков, если выпадала грань 0.
2. Добавлена консольная команда GETCHEAT. Показывает, использовались ли при игре чит-коды: 1 - использовались, 0 - нет.

Re: Программа для разведки

СообщениеДобавлено: 12 фев 2015, 14:50
VDV_forever
Александр, у меня выдает ошибку на XP:
lm.jpg
lm.jpg (19.29 КБ) Просмотров: 2580

Re: Программа для разведки

СообщениеДобавлено: 12 фев 2015, 15:33
DeathLust
Ну так приложение вин64, а не вин32.

Re: Программа для разведки

СообщениеДобавлено: 12 фев 2015, 16:27
AlexSpl
Это потому, что, начиная с версии 3.19, программа стала 64-разрядной.

Re: Программа для разведки

СообщениеДобавлено: 12 фев 2015, 17:01
AlexSpl
Залил 32-разрядную версию, обновил пост (см. выше).

Re: Программа для разведки

СообщениеДобавлено: 14 фев 2015, 04:45
AlexSpl
LM Oracle 3.19.1.1 XE

Апдейт для тех, у кого не видна кнопка Start.

Цитата:
Теперь с программой можно работать при разрешении выше 96 dpi.

Re: Программа для разведки

СообщениеДобавлено: 20 фев 2015, 12:26
bobchik
А я не пойму, в чем отличие 86 от 64 версии? У меня обе запускаются.
И кстати, там версия Героев 1 указана как 1,04 ТЕ, а у меня обычные буковские - это не страшно?

И это.. я правильно понял, что в этой программе и есть тот легендарный светофор, которые позволяет ловить мораль/удачу?

Re: Программа для разведки

СообщениеДобавлено: 20 фев 2015, 16:30
DR28
86 для 32-х разрядной ОС, 64 - для 64-х разрядной

Re: Программа для разведки

СообщениеДобавлено: 20 фев 2015, 17:06
AlexSpl
Цитата:
86 для 32-х разрядной ОС, 64 - для 64-х разрядной

Всё верно. x64 можно запустить только под 64-разрядной Windows, а x86 работает на обеих системах. Однако если у Вас 64-разрядная Windows, лучше использовать "родную" версию, т.к. она быстрее. По функционалу версии не отличаются.

Цитата:
И кстати, там версия Героев 1 указана как 1,04 ТЕ, а у меня обычные буковские - это не страшно?

Не страшно. Но есть нюансы. Например, программа считает артефакт Fizbin of Misfortune как дающий -3 к удаче, а не -2 к морали со всеми вытекающими. Программа считает содержимое таких объектов, как Кораблекрушение, Скелет и т.п. фиксированным на конкретном сейве, а не рандомным, как в оригинальных Героях 1.

Цитата:
И это.. я правильно понял, что в этой программе и есть тот легендарный светофор, которые позволяет ловить мораль/удачу?

В LMOracle два "светофора": один - для Героев 1, другой - для Героев 3. Если первый полностью дописан, то разработка второго прекращена в 2009 году, полагаю. "Светофор" для Героев 3 работает только под 32-разрядной Windows и не учитывает многие факторы, такие, например, как спецабилки существ, мультиатака гидр и т.п. Кроме того, для его корректной работы необходимо для каждого конкретного действия правильно указать целый ряд параметров (размер атакующего и атакуемого отрядов, особенности атаки: с ответкой или без, двойная атака или нет, погибнет ли отряд в результате атаки или нет). В "светофоре" для Героев 1 всё это делается автоматически.