Главная » Статьи для тега "только"

Безопасность короля

Добавлено Дата: 16 January, 2011 категория: Игры, Теория

В шахматах безопасность короля занимает особое место. Цель игры — по­ставить мат королю. Чем больше программа обращает внимание на без­опасность короля, тем лучше она играет. Нужно учесть, что оценка позиции инвертированная, и если мы разрабатываем безопасность короля, то про­грамма лучше чувствует потенциальные угрозы королю и успешнее строит атаки на короля противника. — это ключевая тема шахматной программы. Шахи, безусловно, отражают безопасность короля, но не в полной мере. Очень глубокого полного перебора и продления шахов может оказаться достаточно для приемлемой игры, но варианты, потенци­ально опасные для короля, лучше просчитывать глубже. Эти ходы сложно как-то характеризовать. Они увеличивают давление на короля противника, и все. Представим себе на поле игры некоторые воображаемые квадраты: квадрат, равный полю игры, отображает все поле, некоторый квадрат вокруг короля — поле короля. Любые передвижения в квадрате короля могут иметь повышенную опасность для него. Можно еще представить себе квадрат цен­тра поля, отражающий борьбу за центр в начале игры, некоторый квадрат для проходных пешек на половине противника и т. д. Главная идея исполь­зования таких квадратов, или мини-полей, заключается в том, что на всем поле перебрать глубже ходы мы не в состоянии, но можно продлевать ходы в некоторых выбранных квадратах. Деление на квадраты довольно условно, но нужно не забывать, что мы не вносим дополнительной погрешности, а только ищем критерии для более углубленного просчета некоторых ходов. Ситуация в форсированных вариантах все равно будет просчитана до конца, мы только можем расширить полный перебор для некоторых строк игры.

Читать »

Элементы расширения в Saxon

Добавлено Дата: 11 January, 2011 категория: XSLT

XSLT 1.0 (Saxon версия 6.5.4)

можно реализовать только на языке Java. Не­обходимо определить пространство имен, которое связывает имя расширения с его реализацией. Но правила здесь более четкие, чем для функций расширения. URI пространства имен должен завершаться символом /, за которым следует пол­ностью квалифицированное имя Java-класса, реализующего интерфейс com.icl.saxon. ExtensionElementFactory:

Читать »

Атака дальнобойных фигур

Добавлено Дата: 7 January, 2011 категория: Алгоритмы, Игры

Давней мечтой шахматных программистов является генерация взятий даль­нобойных фигур, не строя линии. Генерация взятий является самым кри­тичным по времени выполнения фрагментом программы. Дело в том, что больщинство позиций можно отсечь только взятиями, и даже не обязатель­но иметь весь список перемещений. Кроме того, взятия в форсированном поиске рассматриваются до конца. Генерация перемещений на глубине 20 намного больше влияет на скорость выполнения программы, чем на глуби­не 5. Для ускорения получения взятий существует много методик. Мы рас­смотрим только один старый и очень простой прием. Идея следующая: ос­новная масса перемещений после хода некоторой стороны не изменяется, за исключением некоторых ходов, связанных с последней ходившей фигу­рой. Например, если пешка пересекла линию ферзя, то ферзь уже не может бить по этой линии. Остальная масса перемещений осталась без изменений. Изменились только ходы пешки и ферзя, которому она перекрыла линию. Мы сейчас, для простоты, не будем рассматривать, как можно корректиро­вать перемещения всех фигур при ходе, а рассмотрим только дальнобойные фигуры. Введем некоторый массив, где будут представлены все фигуры на доске, независимо от цвета и веса. Их можно представить как ферзи без учета цвета. Даже если это пешка, мы ее будем рассматривать как ферзя, потому что она так же может перекрыть линию дальнобойной фигуре. Ферзь, как известно, объединяет в себе ходы всех дальнобойных фигур. Каждая клетка нашего нововведенного массива будет иметь 8 ссылок на ближайшие фигуры по всем лучам. Наш массив будет иметь размерность не 8 х 8, а 10 х 10. По краям находятся лишние описатели. Даже если по ли­нии фигуры нет, ссылка все равно будет указывать на некоторый элемент, а именно на ближайший за пределами доски. Если нам нужно убрать некото­рую фигуру, мы просто должны восстановить все перекрестные ссылки. Фигура справа, например, будет ссылаться на фигуру слева. Чтобы поста­вить фигуру в новое место, мы должны просканировать 8 лучей во всех на­правлениях до первой фигуры или до края доски и навести перекрестные ссылки. В действительности, нам нужно сканировать не 8 лучей, а 4. Когда мы нашли фигуру справа, она уже ссылается на фигуру слева, и ее искать и строить линию не нужно. Таким образом, при каждом ходе мы строим до­полнительно только 4 луча, но можем выбирать взятия дальнобойных фи­гур, не строя линии. Если это ладья, то нужно просто проверить ссылки по вертикали и горизонтали, не указывают ли они на фигуры противника. Об­ратите внимание, что если одна фигура бьет другую, то все остается без из­менений, и никаких лучей строить не нужно. Когда на глубине идет поиск одних взятий, это позволяет очень быстро вычислять результат размена дальнобойных фигур. При некоторой изощренной технике можно брать взятия с фронта. Мы просто просматриваем список фигур противника, на­чиная с самых ценных, и сразу видно, какие фигуры их бьют. Далее приве­ден пример кода, дающего возможность брать взятия дальнобойных фигур, не строя линий:

Читать »

Пустое пространство

Добавлено Дата: 4 January, 2011 категория: XSLT

Задача

Требуется преобразовать XML в форматированный текст, но из-за странностей в обработке символов пропуска все попытки форматирования терпят неудачу.

Решение

Рассмотрим следующий аннотированный пример XML-документа. Символы ( I (новая строка), ^ (табуляция) и ? (пробел) обозначают текстовые узлы, содер­жащие только пустое пространство, на которые часто не обращают внимания, хотя они тоже могут копироваться в выходной документ:

Читать »

Избегайте подводных камней при переносе с XSLT 1.0 на 2.0

Добавлено Дата: 4 January, 2011 категория: XSLT

Задача

Не каждая таблица стилей, созданная для версии 1.0, будет без изменений ра­ботать и в 2.0.

Решение

При переносе таблиц стилей из версии 1.0 в 2.0 нужно помнить о нескольких подводных камнях. Часть из них можно обойти, включив режим совместимости с XSLT 1.0; для этого нужно задать атрибут version="1.0" в элементе stylesheet: <xsl: stylesheet version= " 1. 0 " >. Но уж раз вы начали перенос старых программ в версию 2.0, то есть и другие способы справиться с несовместимостями.

Читать »

Форсированные варианты

Добавлено Дата: 1 January, 2011 категория: Игры, Теория

По окончании полного перебора поиск может быть продолжен в форсиро­ванном варианте, который, в сущности, является конечной стадией выбо­рочного поиска. Основное его назначение — дать примерную оценку пози­ции горизонта. Какие ходы являются форсированными? В самом простей­шем случае это взятия. Взятия в шахматах дают самый большой прирост оценки (существенно больше, чем стратегическая оценка), и поэтому рас­смотрение взятий в глубине поиска сглаживает до некоторой степени эф­фект горизонта. Взятия являются также ходами, требующими немедленной реакции. В шахматах бывают очень длинные размены, которые программа должна рассматривать до конца. Если программа считает на 8 полуходов и рассматривает все размены в конце, уровень ее игры будет значительно вы­ше. Кроме взятий, и другие ходы могут являться форсированными. Напри­мер, шахи. Шах является, в сущности, видом атаки. Атака может быть на пешку, на ферзя, а в случае шаха — на короля. Шах является особым ходом в шахматах. Игра при шахе как бы замирает, и сама ситуация требует более глубокого просчета. Шахи в очень сильной степени влияют на эффект гори­зонта. Если форсированные варианты не рассматривают шахи, их оценка является уж очень приблизительной. В некоторых случаях и этого бывает достаточно. Если программа считает глубоко и имеет развитую систему вы­борочных продлений полного перебора, то на некоторой глубине ей может оказаться достаточно самой приблизительной оценки горизонта. Существу­ют два основных подхода к этой проблеме:

Читать »

Функции расширения в Saxon

Добавлено Дата: 30 December, 2010 категория: XSLT

XSLT 1.0 (Saxon версия 6.5.4)

Saxon позволяет обращаться к функциям расширения, написанным на Java, следуя интерфейсу, который был определен в проекте стандарта XSLT 1.1.

В настоящее время Saxon в качестве языка расширения поддерживает только Java, поэтому функции расширения объявляются, как в следующем примере:

Читать »

Обработка документов XML

Добавлено Дата: 23 December, 2010 категория: Java, Web, XML

В развитии Web-технологии огромную роль сыграл язык HTML (HyperText Markup Language, язык разметки гипертекста) . Любой человек, совсем не знакомый с программированием, мог бы за полчаса понять принцип разметки текста и за пару дней изучить теги HTML. Пользуясь простейшим текстовым редактором он мог бы написать свою страничку HTML, тут же посмотреть ее в своем браузере, испытать чувство глубокого удовлетворения, и гордо выставить в Интернете свой шедевр.

Читать »

Архитектура Web Services

Добавлено Дата: 21 December, 2010 категория: Java, Web, XML

Широкое распространение Интернета началось после того, как была создана "Всемирная паутина" WWW (World Wide Web, "Всемирный словарь Вебстера", если считать слово Web сокращением слова Webster). Она сделала получение информации из Интернета легким и приятным занятием. На каждой машине есть стандартный браузер: Mozilla, Opera, Internet Explorer, Netscape Communicator — выбирай, что нравится. Человек запрашивает Web-страницу с любого сервера, включенного в WWW, нимало не интересуясь, на какой платформе работает Web-сервер, какой операционной системой он управляется, в каком порядке идут байты в его машинных словах. Да и название и версия самого Web-сервера вовсе не интересуют клиента. Ему достаточно набрать адрес URL, что-нибудь вроде

Читать »

SOAP-послание с дополнениями

Добавлено Дата: 20 December, 2010 категория: Java, Web, XML

Компоненты распределенного приложения часто должны обмениваться не только текстовыми SOAP-посланиями, но и графическими документами: изображениями, схемами, чертежами, рукописями. Такие документы обычно оформляются в бинарных форматах GIF, JPEG, PDF. Метод POST протокола HTTP может передавать не только текстовую, но и самую разнообразную информацию, определяемую MIME-типами text, image, audio, video, application, multipart, message. Остается только совместить передачу SOAP-посланий и бинарной информации. Для этого удобен М1МЕ-тип multipart, введенный рекомендацией RFC 2046.

Читать »

Единственный ответ

Добавлено Дата: 14 December, 2010 категория: Игры, Теория

Я ни в коем случае не могу претендовать на полное изложение предмета, хотя сам и использую данный прием в своих программах. Если в позиции есть только одно легальное перемещение, то глубину просчета нужно увели­чить. Все вроде бы просто. Только что считать легальным перемещением? Если существует некоторая позиция, где все ходы не несут материального выигрыша, а один выигрывает пешку, то можно сказать, что ход, выигры­вающий пешку, является легальным, или правильным. Самое простое тол­кование легальности перемещения — это когда короля не бьют следующим ходом. Если есть только один ход, где король не под боем, то глубину нуж­но увеличить. В стандартных выборочных продлениях при шахе глубина остается неизменной, а если легальное перемещение единственное, то ее можно даже увеличить.

Читать »