Эта статья будет посвящена тому, как написать простую, даже банальную игру: крестики-нолики. Причем самые обыкновенные — 3 на 3. Здесь я подробно опишу этапы написания программы и все рассуждения.
Статью можно поделить на две части — эта, где изложена теория написания крестиков-ноликов (далее — КН), и вторая — исходники программы, снабженные обильными комментариями (программа написана на C++ и адаптирована под MSVS6).
Так вот. Основа любой более или менее продвинутой игры — искусственный интеллект (ИИ). Я не подразумеваю тетрис или что-нибудь типа игры «Lines», где игрок не должен бороться с компьютером. И в наших КН ИИ должен присутствовать — пускай слабенький и тупенький, но хоть какой-то.
Для создания ИИ (если, конечно, не строить планы создать андроида) нужно сначала определиться, что он должен делать. Даже самый навороченный современный ИИ не может делать всего; интервал его способностей крайне ограничен. У нашего ИИ будет только одна задача — руководствуясь определенными правилами, поставить крестик (или нолик) в определенную клетку.
Программирование. Как составить алгоритм для программы?
И нам надо эти правила сформулировать. Для этого надо напрячь мозги и вспомнить все тонкости игры в КН, а лучше — сыграть с десяток партий с приятелем. Поиграли, поиграли, и вывели, что:
- При идеальной игре выиграть невозможно
- Единственный шанс выиграть (если противник не абсолютно туп) — создать безвыходную ситуацию. Это достигается созданием определенной комбинации ваших меток, при которой, как бы враг ни походил, вы всегда можете выиграть партию. Эти комбинации — заполнены 3 угловые точки, причем между 2-мя парами из них должны быть пустые клетки; заполнены 2 угловые и центральная, и соблюдается то же правило.
- Из второго пункта можно понять, что существуют «выигрышные» позиции — это (1,1), (1,3), (3,1), (3,3), (2,2).
При формулировке я пользовался следующими определениями:
- Метка — крестик или нолик.
- Линия — она и есть линия, набор из 3-х клеток.
Теперь, поняв правила игры, можно писать ИИ.
Первым делом, компьютер должен проверить на наличие выигрышных ситуаций. Правда ведь, если компьютер может походить так, что выиграет, остальное его не колышет?
Затем, если ИИ не может выиграть с одного хода, он должен проверить наличие опасных для него ситуаций (т.е. противник выиграет следующим ходом).
Если и таковые ситуации отсутствуют, то компьютер должен походить просто так, а лучше — на одну из выигрышных позиций (причем лучше проверить, можно ли создать противнику безвыходную ситуацию). Если все таковые заняты, то просто на первую попавшуюся свободную клетку.
Итак, стоит обобщить вышеизложенное и кратко изложить шаги ИИ:
- Проверить, нельзя ли завершить игру победой.
- Проверить, не может ли враг на следующем ходе завершить игру победой.
- Проверить, можно ли создать противнику безвыходную ситуацию
- Если нельзя, то походить просто на одну из выгодных позиций.
- Если и это невозможно, походить на первую попавшуюся клетку.
Вот, в общем, и все. В примере компьютер играет сам с собой — и во всех тестах, что я проводил, игра заканчивается ничьей.
Как БЫСТРО изучить АЛГОРИТМЫ и научиться решать задачи? Книги, сайты, инструменты
Источник: codenet.ru
Программирование на C, C# и Java
Уроки программирования, алгоритмы, статьи, исходники, примеры программ и полезные советы
Алгоритм DES
Поговорим опять о шифровании. На этот раз рассмотрим алгоритм DES. DES — алгоритм блочного шифрования на основе сети Фейстеля, которая проходится 16 раз. DES может использоваться в нескольких режимах; мы рассмотрим режим «электронной кодовой книги» — ECB (electronic code book). Разработку будем вести на языке программирования C#.
Алгоритм DES. Описание
DES — блочный алгоритм, то есть при шифровании исходное сообщение переводится в двоичный код, а затем разбивается на блоки и каждый блок отдельно зашифровывается (расшифровывается). По стандарту (принят в 1977 году) размер блока DES равен 64 бита, то есть используя 8-ми битовую кодировку ASCII, применяемую в те времена, получим в одном блоке — 8 символов.
Теперь же в основном используется 16-ти битная кодировка Юникода (UTF-16), поэтому, чтобы сохранить длину блока равную 8-ми символам, увеличим размер блока DES до 128 бит.
Алгоритм DES. Шаги
Итак, для того, чтобы зашифровать сообщение алгоритмом DES, необходимо выполнить следующую последовательность шагов:
- довести исходное сообщение до такого размера (в битах), чтобы оно нацело делилось на размер блока (sizeOfBlock = 128 бит);
- разделить исходное сообщение на блоки;
- довести длину ключа до длины половины блока;
- перевести ключ в бинарный формат (в нули и единицы);
- провести над каждым блоком прямое преобразование сетью Фейстеля в течении 16-ти раундов. После каждого раунда необходимо выполнять циклический сдвиг ключа на заданное количество символов;
- соединить все блоки вместе; таким образом получим сообщение, зашифрованное алгоритмом DES.
Расшифровка DES производится по аналогии. Используется обратное преобразование сетью Фейстеля.
Алгоритм DES. Сеть Фейстеля
Сеть Фейстеля используется в алгоритме DES для зашифровывания (прямое преобразование сетью) и расшифровывания (обратное преобразование). Эти преобразования изображены на рисунках 1 и 2 соответственно.
Рисунок 1. Прямое преобразование сетью Фейстеля
Рисунок 2. Обратное преобразование сетью Фейстеля
Чтобы вам было понятнее, давайте рассмотрим один раунд прямого преобразования сетью Фейстеля.
На i-й итерации исходный блок делится пополам — левая часть обозначается L, правая R. Над R и ключом ki вычисляется какая-либо выбранная логическая функция f (мы будем использовать XOR). Затем выполняется вычисление логической операции «исключающее или» над L и вычисленным ранее значением функции (L xor f). Старое значение R переносится в левую часть блока, а в правую часть заносится значение L xor f. И последняя операция раунда — нужно выполнить циклический сдвиг ключа: keyi+1 = keyi >> shiftKey (при расшифровке keyi-1 = keyi
Алгоритм DES. Программная реализация
Создадим для разрабатываемой программы следующий интерфейс (рисунок 3).
Рисунок 3. Пользовательский интерфейс программы
Объявим ряд переменных, требующихся для программы.
Источник: vscode.ru
Как написать свой алгоритм программы
Логин: Пароль: Регистрация rel=»nofollow» —>
Как написать свой алгоритм торговли?
Для начала мы рассмотрим вопрос относительно того: для чего нужен торговый алгоритм ? Все мы знаем о том, что торговля на рынке форекс является серьезным занятием, которое, как и все остальные профессии, должно приносить не только удовольствие, но и прибыль.
Для того что бы торговля на рынке Форекс приносила прибыль, каждый трейдер должен понимать, что он делает на рынке и какие цели он преследует. Что бы придерживаться целей, у трейдера должно быть для начала изложено хотя бы на бумаге, то что он собирается делать и то, по какому плану он будет торговать.
Лучший, на мой взгляд, брокер — для дейтрейдинга , для скальпинга .
Итак, начнем с того, какие пункты должны быть прописаны в вашем торговом алгоритме :
- В первую очередь вы должны описать ваш рабочий день. Рабочий день – начинается с просмотра новостей, которые нас ждут в предстоящей торговой сессии. В соответствии со своим стилем торговли, определите, будете ли вы торговать во время выхода, тех или иных новостей, или же подтянем уровни StopLoss, и будем ждать более благоприятного времени для торговли.
- Не менее важным критерием подготовки к торговой сессии, является технический анализ. Уделяйте не менее 15-ти минут в день, для того, чтобы определить главные ключевые уровни, которые будут актуальны для торгового дня. Так же важно обозначить для себя на каких технических фигурах будет вестись торговля и по каким валютным парам.
- В торговом алгоритме, должен быть прописан такой пункт как торговая стратегия. Она должна включать в себя ключевые факторы, на которые вы ориентируетесь при принятии решений для входа в позиции. К примеру: для торговли по техническому анализу такими факторами являются уровни поддержки и сопротивления, несколько фигур технического анализа и несколько паттернов из Price Action.
- Пропишете количество убыточных сделок подряд в процентном соотношении от депозита. То есть вы должны точно знать, сколько вы готовы потерять, что бы эти сильно не ударило по вашему счету. Так же стоит прописать, сколько прибыльных сделок за один день вы можете совершить, тоже в процентном соотношении. Это позволит вам исключить эмоции из торгового процесса. Например: вы за несколько сделок увеличили свой депозит на 5-6%, а потом все заработанные за день деньги потеряли. Такое происходит из-за эмоций, и не соблюдения правил торгового алгоритма.
- Рассчитывайте свои риски. Первое, что нужно учесть, это то, что уровень Stoploss, должен стоять именно там, где эму необходимо стоять исходя из технического анализа, а не исходя из того, сколько мы готовы потерять. То есть сначала мы определяем уровень Stoploss и уже от него рассчитываем, допустимый риск, который на рынке Форекс, не должен превышать 2%.
- Выбор временного периода (таймфрейма) зависит прежде всего от депозита, которым оперирует трейдер. Для новичков на рынке, оптимальным вариантом, будет торговля внутри дня на периоде H1, так как не большие депозиты в 300 – 500 или даже в 1000 долларов не позволят им вести среднесрочную торговлю на дневном графике. Так как заход в сделку даже минимальным объемом будет превышать уровень допустимого риска.
- В торговом алгоритме каждого трейдера должен быть прописан такой момент как среднесрочные цели. Например: «Я торгую пол года и показываю положительную динамику роста депозита, четко придерживаюсь стратегии торговли и манименеджмента. После полугода, я перехожу на управление своим счетом через ПАММ систему, после этого я торгую еще три месяца и начинаю получать какие-то инвестиции. Ставьте цели и достигайте их, вы не должны находиться на рынке спонтанно, вы четко должны знать как, как скоро и в коком размере вы хотите сделать себе капитал.
- Каждая совершенная сделка должна заноситься в «Дневник трейдера» и тщательно анализироваться. Создайте себе специальный журнал, в котором для каждой сделки будут прописаны такие пункты как:
- По какой цене мы вошли в сделку
- По какой цене вышли из нее
- Уровень StopLoss
- Объяснение по каким причинам была совершена эта сделка
- Если были допущены ошибки, то какие
- Сделать выводы, и внести при необходимости коррективы
Анализировать свое поведение в рынке, нужно ежедневно. Это обязанности любого трейдера, как новичка, так и опытного профессионала. По той причине, что рынок не статичная среда, а динамичная, и она всегда меняется.
- Алгоритм торговли NYSE
- Торговый алгоритм трейдера NYSE
- Торговый алгоритм трейдера Форекс
- Торговый алгоритм А.М.Герчика
После того, как мы описали подготовку к торговой сессии, свое поведение в торговле, и анализ этого поведения, нам необходимо детализировать свой рабочий день. То есть, прописать, когда работать и когда отдыхать. Что бы жизнь не превращалась в сплошное слежение за графиками, и была возможность решать какие-то свои дела или просто отдыхать в оффлайн жизни.
Это не лирическое отступление, а конкретная рекомендация полезная для торговой деятельность. Дело в том, что как показывает практика, даже опытные трейдеры, могут терять деньги из-за того, что в их жизни накопилось много не решенных проблем, и эмоциональная составляющая начинает включаться в процесс торговли. Этого стоит избегать, поэтому нужно планировать свой день, что бы уделять время и работе и близким.
В заключении хотелось бы сказать, что ваш торговый алгоритм должен быть максимально детализирован. Делайте фото, всех ваших сделок и заносите их в «дневник трейдера» с последующим детальным их описанием.
Источник: forexlabor.info