Построен интеллектуальный молекулярный компьютер

15.05.2010
null
Состояние молекулярного компьютера изменяется аналогично состоянию мозга, в зависимости от решаемой в данный момент задачи.

Команда исследователей из Японии и Мичиганского Технологического Университета построили молекулярный компьютер, использующий новейшие знания о работе мозга. Физик Ранжит Пати (Ranjit Pati) из Michigan Tech разработал теоретические основы такого миниатюрного компьютера, который построен не из кремния, а из органических молекул, размещённых на золотой подложке. “Данный молекулярный компьютер придумал мой коллега Anirban Bandyopadhyay из Национального института материаловедения,” – говорит Пати. Их работа освящена в статье “Массивно-параллельные вычисления на органическом молекулярном слое” (“Massively Parallel Computing on an Organic Molecule Layer”), опубликованной 25 апреля в Nature Physics.

Прочитать остальную часть записи »

Видео о кендо в Калининграде.

13.04.2010

В Калининграде есть замечательный клуб кендо, про него сняли небольшой репортаж.

На видео: интервью с Виталием Пруксом и элементы тренировки.

В съемках участвовали члены Калиниградского Клуба Кендо.

SuperTracker – Super Sample Robot, .Net – версия

06.04.2010

SuperTracker – это Супер – Sample Robot от CrazyBassonist.

В его основе – робот Tracker от Mathew Nelson’а, доработанный Flemming N. Larsen.

Захватывает цель, приближается к ней, и стреляет.
Прочитать остальную часть записи »

SnippetBot – .Net-версия бота Алисдара Оуэнса

06.04.2010

SnippetBot – робот Алисдара Оуэнса (Alisdar Owens).

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

Часть кода взято из Nicator и Chrisbot.

Соглашения о коде данного бота:

  • Все углы – в радианах.
  • Хранение абсолютных величин положения противников, а не относительных.
  • Очень мало кода в событиях.

Прочитать остальную часть записи »

Нанобот DustBunny 3.0

03.04.2010
.Net - версия нанобота DustBunny 3.0, который использует антигравитационный механизм движения.
// DustBunny 3.0
// Автор - Mike (--Miked0801)
// Это нанобот, использующий антигравитационное движение.
// Стреляет по ближайшей цели прямо по направлению обнаруженной цели.

using System;
using Robocode;
using Robocode.Util;

namespace RobocodeBotsDotNet
{
    public class DustBunny : AdvancedRobot
    {
        const double GunFactor = 50;

        static double _xForce;
        static double _yForce;
        static String _lastTarget;
        static double _lastDistance;

        public override void Run()
        {
            // это нужно, чтобы было удобнее стрелять по неподвижным целям
            IsAdjustGunForRobotTurn = true;

            // Сброс показаний дальномера
            _lastDistance = Double.PositiveInfinity;

            // Запустить бесконечную команду для радара.
            // Такой код позволяет сохранить много места (спасибо Dr. Loco!)
            TurnRadarRightRadians(Double.PositiveInfinity);
        }

        public override void OnScannedRobot(ScannedRobotEvent e)
        {
            // Вычисление абсолютного местоположения для процедур
            // прицеливания и антигравитационного движения,
            // и определение расстояний
            double absoluteBearing = e.BearingRadians + HeadingRadians;
            double distance = e.Distance;

            // Используем очень простую систему для имитации антигравитационных сил
            _xForce = _xForce * 0.9 - Math.Sin(absoluteBearing) / distance;
            _yForce = _yForce * 0.9 - Math.Cos(absoluteBearing) / distance;

            // Вычисление угла поворота
            // по приближении к стенам робота сильнее притягивает к центру
            SetTurnRightRadians(Utils.NormalRelativeAngle(
                Math.Atan2(_xForce + 1 / X - 1 / (BattleFieldWidth - X),
                _yForce + 1 / Y - 1 / (BattleFieldHeight - Y))
                - HeadingRadians));

            // Едем вперед
            SetAhead(Double.PositiveInfinity);

            // Перед резким поворотом сбрасываем скорость
            MaxVelocity = 420 / TurnRemaining;

            // Если пушка не нагрета и правильно нацелена,
            // то производим выстрел
            if (GunHeat == 0)
            {
                // Вычислить мощность выстрела в зависимости от текущего
                // количества энергии и расстояния до цели
                // после чего сбросить значение дистанции
                SetFireBullet(Energy * GunFactor / distance);

                _lastDistance = Double.PositiveInfinity;
            }

            // Захватить радаром ближайшие боты
            if (_lastDistance > distance)
            {
                _lastDistance = distance;
                _lastTarget = e.Name;
            }

            // а стрелять по самому близкому боту
            if (_lastTarget == e.Name)
            {
                // Сопровождать радаром цель
                if (GunHeat < 1)
                {
                    // Повернуть радар угол, доступный в пределах хода
                    SetTurnRadarLeft(RadarTurnRemaining);
                }

                // Прицелиться по текущему местоположению цели
                SetTurnGunRightRadians(
                    Utils.NormalRelativeAngle(absoluteBearing - GunHeadingRadians));
            }
        }
    }
}

Гибкая методология разработки программного обеспечения

29.03.2010

Информация о курсе
Курс посвящен методологии разработки программного обеспечения Microsoft Solutions Framework for Agile Software Development корпорации Microsoft.
Эта методология описывает подход и организацию работы при создании программных продуктов и, в отличие от более масштабной и абстрактной системы Microsoft Solutions Framework, сразу готова к применению. Руководство предназначено для менеджеров проектов, а также для разработчиков, аналитиков, тестеров, архитекторов и, возможно, других участников команды разработчиков.

Интересный курс на intuit.ru.

Создание робота для Robocode в .NET

29.03.2010

В данной статье приводится пример создания простого робота для Robocode в .Net на языке C#.

Для разработки использовалась Visual Studio 2008. Если работать в Visual Studio 2010, то в свойствах проекта нужно будет изменить версию фреймворка .Net с 4 на 3.5.

Сначала нужно создать новый проект из шаблона “библиотека классов” (Class Library).

После этого нужно добавить ссылку на библиотеку Robocode .Net, которая, если во время установки использовать путь по умолчанию, находится в папке C:\robocode\libs. Файл называется robocode.dll.

Дальше желательно удалить пустой класс в новом проекте Class1.cs и добавить новый класс MyRobot.cs.

Ниже приведен код простого бота, который можно добавить в новый класс.

// Оригинальный код от FNL, источник:
// http://robowiki.net/wiki/Robocode/.NET/Create_a_.NET_robot_with_Visual_Studio

// Доступ к стандартной системе .Net
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

// Доступ к общей API Робокода
using Robocode;

// По соглашению, пространство имен должно называться инициалами разработчика,
// но в нашем случае используем имя всего проекта по трансляции ботов на .Net
namespace RobocodeBotsDotNet
{
    // Имя робота - MyRobot, тип робота - Robot
    class MyRobot : Robot
    {
	    // Главный метод робота, содержащий его логику
	    public override void Run()
        {
            // -- Инициализация робота --

            // Повернуть робота вертикально вверх, а
            // пушку повернуть на 90 градусов
            TurnLeft(Heading - 90);
            TurnGunRight(90);

            // Бесконечный цикл нужен для того, чтобы робот
            // выполнял свою программу до самого конца раунда
            while (true)
            {
                // -- Эти команды повторяются бесконечно --

                // Проехать 5000 пикселов вперед
                Ahead(5000);

                // Повернуть робота на 90 градусов
                TurnRight(90);

                // Наш робот будет двигаться вдоль границ поля
                // боя, повторяя две инструкции выше.
            }
        }

        // Обработчик события робота, когда робот
        // видит другого робота
        public override void OnScannedRobot(ScannedRobotEvent e)
        {
            // Сделать выстрел с мощностью пули = 1
            Fire(1);
        }
    }
}

Соглашения по именованию роботов.

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

В таком случае возможны следующие ситуации:

  • В битве могут участвовать роботы с одинаковыми именами, только если они определены в разных пространствах имен.
  • В одном пространстве имен может быть несколько имен, и будет хорошо, если другие участники боев будут знать, кому принадлежат эти роботы.
  • Во время создания новой битвы будет легко выбрать именно вашего робота.
  • Для сохранения данных, робокоду нужно пространство имен. Использование глобальных пространств имен не допускается.

Таким образом, имена роботов обычно записывают следующим образом:

<ваши инициалы>.<имя робота>_<версия робота>

Полное имя робота, которого мы создали выше, может выглядеть следующим образом: 

RobocodeBotsDotNet.MyRobot_1.0

Запуск скомпилированного робота в Робокоде.

В настройках робокода нужно указать путь, по которому могут находиться библиотеки роботов. Для этого в меню Options -> Preferences -> Development Options нажмите кнопу Add и выберите тот путь, куда попадают скомпилированные библиотеки проекта. Это может быть папка \bin\debug или \bin\release, которая находится в папке всего проекта.

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

Robocode .NET

23.03.2010

Вышла новая версия битвы роботов Robocode, которая поддерживает роботов, написанных на платформе .Net (единственно, пока нет поддержки mono).

Сделать первые шаги в создании робота поможет вступительная статья:

“Как сделать робота в Visual Studio на платформе .Net на языке c#”.

Для разработки более совершенного робота лучше всего учиться у опытных разработчиков – некоторые из них выкладывают своих ботов в открытом доступе:

Разработка через тестирование

26.12.2009

Разработка через тестирование (Test-Driven Development) – технология программирования, которая позволяет создавать чистый и устойчивый код с минимальными усилиями.

В основе этой технологии лежит разработка теста до того, как будет реализована какая-нибудь часть программа. Сначала пишется тест, и нужно убедиться, что этот тест не срабатывает. Это может произойти, с одной стороны, из-за того, что используемые в тесте методы тестируемого класса еще не определены, с другой – условия теста программа обрабатывает некорректно. Далее нужно максимально быстро и любой ценой заставить тест сработать. В некоторых случаях решение может оказаться очевидным, реализовать его легко и просто. Иногда пишутся заглушки – “суррогатный код”, единственная цель которого - выполнение условий теста. После того, как тест сработал, выполняется рефакторинг созданного кода.

Дальше цикл повторяется: новый тест, заставить тест сработать, рефакторинг.

В результате такого подхода будет создан “чистый код, который работает”. Такой код легко читать, легко поддерживать и легко расширять.

Есть замечательная книга, описывающая этот подход: “Экстремальное программирование. Разработка через тестирование”, Кент Бек. В ней приводится пример использования этой технологии при реализации простого приложения.

Еще одна книга, которую я бы порекомендовал, называется “The Art of Unit Testing with Examples in .NET”, Roy Osherove. В ней акцент поставлен на изучения различных возможностей тестирования с использованием библиотеки NUnit. Эта книга носит более прикладной характер, и отвечает на многие сложности, которые возникают при тестировании.

Ссылка на статью о фрактальном сжатии изображений.

16.11.2009

Замечательная статья 1996 года о фрактальном сжатии изображений. Приводятся сравнения с алгоритмами JPEG. Ссылка на статью здесь.