Страница 9 из 15

СообщениеДобавлено: Вт янв 02, 2007 12:17
Pk
Тогда тебе на выбор - либо тот вариант с фантазией у компа, либо этот.
Какие проблемы с "кратчайшим путём"? он пока его будет строить снесёт все города.

Так, а если такой вариант: сделать несколько профилей ИИ:
Low AI - стандартный на сегодня/наученный по минимуму (хотя бы подсоединять дороги и экономить транспорт.)
Medium - имеет фиксированное к-во остановок.
Live - прикрепить к фотке. Т.е. встроить алгоритм, который будет определять взгляды президента компании и его устремления.
High - полный ИИ без спуска и поблажек.

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

Главное - отучить терраформить всё, и сделать его хоть как-то конкурентно способным.

СообщениеДобавлено: Вт янв 02, 2007 17:55
Quark
«"кратчайший путь" - это старый вариант» — если это про оригинальный ИИ, то он зачастую строит далеко не кратчайший путь :)

«оптимальный» это хотя бы тот, у которого нету существенных изъянов, выжимать дополнительные 15% эффективности, сливая два маршрута в один на этапе планирования можно далеко не всегда

СообщениеДобавлено: Вт янв 02, 2007 17:58
Quark
«Главное - отучить терраформить всё, и сделать его хоть как-то конкурентно способным.» — совершенно верно, в первую очередь надо решить эту задачу, чтобы ИИ научился, наконец, нормально соединить две точки и пустить по ним поезда, потом можно научить его строить развязки и двухколейки, а уж в последнюю очередь ездить по проложенным ранее маршрутам.
Кстати ваш вариант не будет работать без возможности строить развязки на двухколейках.

СообщениеДобавлено: Ср янв 03, 2007 16:29
Pk
как отучить терраформить всё:
1) Нафиг убрать этот алгоритм до начала строительства.
2) Пусть терраформит то, что нужно по ходу строительства.

Примерный рассчёт при строительстве дороги:

Цены:
срытие 1-й клетки - 307£ (187£)
Очистка территории от песка - 30£ (в пустыне =) )
Строительство дороги (1/4) - 101£ (70£)
Рассчёт маршрута а/м БФБ-ПХ
есть прямая дорога на ПХ из БФБ, и там меньше препятствий по прямой по этому строим оттуда.
Имеется возможность прямой дороги, однако там есть несколько препятсивий. ставим точку поворота за 1 клетку до препятствия.
Препятствие - склон холма, параллельный, длина 9 клеток.
стоимость маршрута:
в случае срывания земли до уровня дороги мы затратим денег:
торможение транссредств из-за терраформа: 0*кооф. (0 подъёмов) (вернее там должна быть дробь, ну да ладно)
срывание поверхности:
1) 307-30*4=307-120=187£
2) (9-1)*2=16 ед.
3) 8*187+18*30=1496+540=2036£
Строительство дороги:
1) 17*2*70+17*30=2890£
2) 2036+2890=4926£, потери=0

В случае наращивания земли:

1) 307-30*4=307-120=187£
2) (9-1)*2=16 ед.
3) 8*187+18*30=1496+540=2036£
Потери 1+бонусы 1=-0,5 (вернее рассчитать так: сколько денег теряется на этих подъёмах и сколько экономится на спусках)
Строительство дороги:
1) 17*2*70+17*30=2890£
2) 2036+2890=4926£, потери=0,5

Строить объезд из точки можно по 2-м направлениям:
1) налево из БФБ
2) направо из БФБ

Налево мы наталкиваемся на холмы, справа же напрямую идёт свободная поверхность. Не требуется изменение территории.

1) 18*70+18*100=1260+1800=3060
Повороты=1
Цена дороги: 3060+1поворот*время ожид исп*ожид.к-во*потери на повороте*20 лет.

И вот мы в черте города ПХ.
Предположим, что ожидаются 2 остановки-блока автобус+лорри,одна над водонапоркой (по мелкой улочке за квартирками), другая там, где две улицы идут параллельно, сразу за домиком. Выход в сторону БФБ.

тогда продолжения маршрутов:
Через холм:
1) со сносом дома(-140£): 140+100+2*70=380£
Стоимость дороги:380£ - 1*(водокачка+пищеблок+автобусы в городе) пасс/мес ~3£/мес*20=1*4*60=120£
Итого: 380+240=620£

Маршрут "прямой гладкий" = 4926+620=5546£.
Маршрут "прямой с подъёмом" = 5546£ + 0,5*потеря при повороте*ожид. к-во машин*10 лет.

Примерный рассчёт. сэйв не прилагаю, логика, надеюсь, ясна.
Примечание: это несколько отличается от предлагаемого алгоритма.

СообщениеДобавлено: Чт янв 25, 2007 14:21
Pk
Перед запуском игры ИИ проверяет игру на наличие новых видов массивов. Производит дописку в типы. (Поддержка разнообразнейших NewCargo)

Подходя к городу мы уже имеем:
Список индустрий, которых мы собираемся обслуживать,
примерный с них доход, виды транспорта к рассмотрению.

REM
│├
││├ если смещение BZ идёт под углом N, то при перемещении по карте под углом N, N+/-90, -N записывается на вирт карту, как перемещение по XY под углом 0/90/180/-90

VAR
│├[Время]
││└Месяц = MO
│├[Расходы]
││├цена на строительство = BP
││├стоимость эксплуатации = RC
││├расход общий = TO
││└дополнительные расходы = EO
│├[Доходы]
││├доход чистый с еденицы = CI
││├доход опосредованный = AI
││└доход общий = TI
│├[Прочее]
││├X, Y - относительные геогр. коорд.
│││├верхняя граница - H
│││└Нижняя граница - L
││├Дальняя линия строительства = FL
││├Начальная линия строительства = NL
││├Активная координата = BL
││└зона строительства = BZ
│└[массивы по типам]
│…├транспорт = TR
│…├груз = CR
│…├единицы из массива = MU
│…└массив данных = DM

│├SUBS│…│├

├[оценка рентабельности](MU) - "коофициент лени"
│├[рассчёт TO] BP+(RC+EO)*120*MO
│├[рассчёт TI] CI+AI
│├[р-т. рентабельности] TI/TO=(MU)RN
│├[р-т. прибыли] (TI-TO)*RN=(MU)TI
│└[возврат]
├[Рассчёт BP]
│├[рассчёт BZ] - думаю, некорректен.
││├[нахождение X, Y]
│││├[нахождение 1-й клетки XY] NA(H(X))=0, NA(H(Y))=0
│││├[создание XY площади]
││├[нахождение LA(X(H));LA(Y(H))] "FA(X(H))-NA(X(H))"; "FA(Y(H))-NA(Y(H))"
││├[нахождение LA(X(L));LA(Y(L))] "FA(X(L))-NA(X(L))"; "FA(Y(L))-NA(Y(L))"
│││├[нахождение LA(H) LA(L)]
│└
├[Рассчёт EO]

+ модуль универсален, позволяет оценивать различные объекты, вплоть до выбора техники для закупки.
+ Позволяет имитировать различные виды мышления.
- массив может выглядеть так: MU.MU'.MU''.MU'''.MU''''.MU'''''.RN
! Можно ещё вести запись к-ва действий (времени на постройку), тогда ещё можно будет увидеть метания - Это дёшево, но муторно, а то дорого, зато быстро.

-------
вот эта помойка.

Основной еррорь - это то, что при рассчёте диагонального пути надо считать чуть иначе и я не могу придумать это "чуть".

RE:
Вариант работы:
1. определения прямой до пересечения (продвижение по "верхней" части столбца до упора/по "верхней" стороне строки, т.е. по той, в чью сторону планируется поворот). На этом этапе сближение идёт с обеих сторон. Цель: найти верхнюю точку пересечения
2. -\\- для нижней стороны.
3. В случае если есть более одной точки к которым должен идти путь повторить операцию для каждой точки, в поле XY записать совмещённый результат.
4. FOR Х = L TO H: FOR Y = L TO H: GO SUB [оценка рентабельности]
5. Строительство выбранного пути

СообщениеДобавлено: Чт янв 25, 2007 16:43
Pk
Так, ладно, со словами я путаюсь, по этому держите файлик, где всё нарисовано.
Условные обозначения:
Голубая линия - корридор строительства
жёлтые линии - те самые треугольники
фиолетовые линии - границы корридора на поворот
красная линия - линия начала строительства поворота

Вот.. и я вот думаю - как объяснить эту часть. Нет нужной сабы в голове :oops:

СообщениеДобавлено: Вт янв 30, 2007 23:41
Pk
Кто-то жаловался на неясность работы тандема ИИ-Игра? Зацените:

0. ИИ - внешняя подпрограмма (желательно в виде неформатированного типизированного файла *.ai)
1. ИИ запрашивает у игры информацию об интересующем массиве.
2. Производится возможный рассчёт исходя их данных массива.
3. По мере надобности цепляются дополнительные массивы.
4. Прописывается цепочка комманд к выполнению.

*2. - рассчёт, заявление новых массивов, сравнение имеющихся.
*3. - переходим к 1. для другого массива.

Массивы можно заявить заранее/фиксировать ссылки на них где-нибудь в памяти (рекомендовано*)
Массив - любое скопище однотипных объектов - спрайтов, свойств клетки, единиц техники и т.п. (Надеюсь, это объяснено понятно?)

* - так как даёт возможность самообучения ИИ без большого гемора для нас.

СообщениеДобавлено: Вт янв 30, 2007 23:44
Pk
Да, кстати, какой код под MS Windows 5.x для клавиши enter?
А то я уже вкусил радость любовных игр по Тантрическим канонам при переводе файлов в читабельный вид. А мне их ещё в Васючный переделывать.

Имеется в виду номер символа, т.е. "CHR$"

СообщениеДобавлено: Ср янв 31, 2007 07:30
Quark
Pk, это, конечно, оффтопик, но код клавиши и код символа — совершенно разные вещи, код символа для клавиши Enter — 13. Кстати, если имеется ввиду перевод строки, то в Dos/Windows он обозначается двумя символами — 13 и 10.

Бухгалтерам))

СообщениеДобавлено: Пн фев 05, 2007 12:55
Pk
1. не оффтопик, но Ворд Пад решил проблему.
2. ... видал я в <женский половой орган> такую совместимость!! WTF, хоть бы переменные назывались нормально - 2-5-7 букв, нет, по 12-14 и ещё с подчёркиваниями... С... и нет нумерации строк - вы как хотите, но это неудобно. :evil:
3. застыла на середине подготовительная работа к настоящему алгоритму. Нету времени и лень страшенная :oops: :lol: . Но кое-что уже есть, и я думаю это "кое-что" уже можно встроить в сборку. 8)
4. Quark! Пользуйся кнопкой "Правка"!
Разбивку на части осуществляй цитатами и/или жирным текстом 5 постов подряд :shock: - это жёстко...

Хотя в принципе, я это ещё редактирую и здесть только отчётность. Можно не комментировать, если только будет что-то действительно интересное.

СообщениеДобавлено: Пн фев 05, 2007 13:07
Quark
(2) — это вообще про что? Нумерация строк есть в любом нормальном редакторе для кода. Длинные имена переменных позволяют быстро понимать их смысл, а вводятся они через автозавершение по первым буквам :)

(4) кнопка не удобная — хочу автоматический сливатель постов! и такой, чтобы новое сообщение не оставалось незамеченным :) А кто читает что-то акромя содержимого поста? Немного пустого места мешает? :)
Основное назначение кнопки «правка» — правка поста, я ею активно пользуюусь для исправления орфографии или уточнения некоторых деталей, а сливать ею посты — она не для этого предназначена!

СообщениеДобавлено: Пн фев 05, 2007 13:45
Pk
Quark писал(а):(2) — это вообще про что? Нумерация строк есть в любом нормальном редакторе для кода. Длинные имена переменных позволяют быстро понимать их смысл, а вводятся они через автозавершение по первым буквам :)

Через автозавершение?! (дошло) А у кого нет этого/влом настраивать каждый раз?
Это про то, что я угорел при переводе исходников.
Нумерация строк - вторая по важности вещь после самого кода. Для меня отсутствие номеров строк в листинге сродни падонкаффскаму.
Длинные переменные долго набирать, а логика - это слияние кучи переменных. Тем более что можно вводить ясные сокращения (leigth=lgth, random=rnd, full_vagon_on_map_capictacy = fvomc=fmvc и тп.)

Quark писал(а):(4) кнопка не удобная — хочу автоматический сливатель постов! и такой, чтобы новое сообщение не оставалось незамеченным :) А кто читает что-то акромя содержимого поста? Немного пустого места мешает? :)
Основное назначение кнопки «правка» — правка поста, я ею активно пользуюусь для исправления орфографии или уточнения некоторых деталей, а сливать ею посты — она не для этого предназначена!

Для этого есть кнопки ctrl, x, c, v, "удалить" и "правка"

Неужели это и есть "интересное"???

СообщениеДобавлено: Пн фев 05, 2007 15:08
Quark
fvomc=fmvc — это совершенно непонятные сокращения, если убрать полное название — то обратно уже никак не расшифруешь, а «length» сокращается до «len», хотя тут тоже не особо ясно для того, кто с таким сокращением не знаком

Автозавершение есть в свободно распространяемых редакторах, для пример MSVS 2005 Express или Eclipse. И даже в маленьких компактных редакторах тоже есть, хотя не такого уровня. Настраивать его не нужно (только язык выбрать, хотя он обычно по типу файла сам выбирается).

Ручная нумерация строк абсолютна не нужна и есть большое зло — для пометки кода есть метки и комментарии.

«Для этого есть кнопки ctrl, x, c, v…» — эти кнопки не работают (насколько мне известно) ни в одном форуме. Полного in-place редактирования постов (без нажатия кнопки «правка» или хотя бы открытия отдельного окна) я еще нигде не видел.

СообщениеДобавлено: Вт фев 13, 2007 01:37
Pk
Как и обещал - выдаю обработанный бред. Немного изменив имена переменных можно цеплять к сборке.

СообщениеДобавлено: Вт фев 13, 2007 01:45
Pk
Quark писал(а):fvomc=fmvc — это совершенно непонятные сокращения, если убрать полное название — то обратно уже никак не расшифруешь, а «length» сокращается до «len», хотя тут тоже не особо ясно для того, кто с таким сокращением не знаком
особенно, если учесть, что len может расшифровываться и как Len', Lenin, Lenina_tezisi, Leningrad, Lennon, Lenta...

Quark писал(а):Автозавершение есть в свободно распространяемых редакторах, для пример MSVS 2005 Express или Eclipse. И даже в маленьких компактных редакторах тоже есть, хотя не такого уровня. Настраивать его не нужно (только язык выбрать, хотя он обычно по типу файла сам выбирается).
И это автозавершение само узнаёт какие у тебя переменные и как их набирать?

Quark писал(а):Ручная нумерация строк абсолютна не нужна и есть большое зло — для пометки кода есть метки и комментарии.
Ручная нумерация строк не дольше, чем набор таких_нужных_как_их_а!_переменных, но позволяет очень быстро понять программу. В книгах почему-то все страницы нумеруют, а когда на одной странице несколько параграфов - то указывают ещё и их номер.

Quark писал(а):«Для этого есть кнопки ctrl, x, c, v…» — эти кнопки не работают (насколько мне известно) ни в одном форуме. Полного in-place редактирования постов (без нажатия кнопки «правка» или хотя бы открытия отдельного окна) я еще нигде не видел.

Ты подрываешь мою веру в устои Вселенной.
Как это - в форумах не работают:
Ctrl+Z, Ctrl+X, Ctrl+C, Ctrl+V!?