-Поиск по дневнику

Поиск сообщений в eugene20237

 -Подписка по e-mail

 




Лень и "неохота"

Вторник, 29 Мая 2012 г. 23:46 + в цитатник
Мне пришла идея о том, почему нам иногда не хочется что-то делать. Работаешь себе, а потом вдруг понимаешь, что это "скучно", "нудно", "неинтересно" и вообще нафиг это дело. Забиваешь и лежишь на печи. Работа стоит, а срок идёт. И вроде бы уже ничего не поделать с этим состоянием, кроме как действовать "через не хочу". Я заинтересовался тем, откуда берётся это состояние.

Во всём виноват ум и его компаньон - внутренний диалог. Во время исполнения привычной работы он включается и начинает говорить. Это происходит, потому что ничто его не загружает, т.к. работа привычная. А говорит он следующее: "То, что я делаю, скучно и гораздо веселее было бы бакланить. Есть тысячу дел, которые приносят больше удовольствия чем это.". А теперь стоп! Задумайтесь, откуда всё это? Это действительно ВАШЕ желание забить? Я задумался и мне показалось, что нет.

Давайте разберёмся, почему возникает эта мысль. Я думаю, что причина в следующем. Не секрет, что нас постоянно все учат: окружающие, СМИ, книги. Мы уже давно стали конгломератом чужих ценностей и инкубатором распорядков. Так вот, среди этой информации, которая уже давно прочно вшита в наш мозг, есть такой "опыт":
Делаем простую работу -> Забиваем -> Бакланим = Должен быть прирост удовольствия
Уверяю вас, подобные цепочки действий есть в "арсенале" каждого из нас. Вроде бы всё верно: да, типа был такой опыт у нас, когда мы впервые забили на работу и нам стало хорошо. Вот в школе например. Вспомните свои ощущения, когда впервые прогуляли урок. Лёгкость есть? У меня была.

Но дальше начинается путаница. На наш собственный небольшой опыт, накладываются мнения друзей, которые абсолютно идентичны этим. Затем из таких мнений формируется мировоззрение целого общества. Общество школьников, например, или студентов. Забить на уроки всегда было модно, а быть ботаном - да ему не даст никто никогда! Всё это прописывается в наш мозг и укореняется в нём в виде представлений о том, как должно меняться наше состояние. Мы убеждены, что если "забить", то станет легче и веселей. Но так было многие годы назад!!! Мы изменились, работа уже никуда не денется. Нужны новые убеждения, а их ещё нет в нашем "арсенале".

Некоторые люди предлагают переписать outdated-привычки на новые. Это не всегда удаётся, но если есть такая возможность, то лучше прошить в голову новую цепочку. Это работает. Я же предлагаю fast and dirty решение, которое тоже прекрасно работает. Суть его в том, что мы должны детектить ленивые мысли и всяческие мечты о более интересном. Что же делать когда враг обнаружен? Отсекать их? Нет, это не сработает, враг слишком глубоко засел. Поэтому мы "ударим по площадям", а именно просто напросто отключим весь внутренний диалог.
Делаем простую работу -> Задумались о лучшей доли -> Отключаем внутренний диалог = Работаем с удовольствием
Вот вам заклинание на все случаи жизни, пользуйтесь!

Примечание о внутреннем диалоге
Имеется в виду просто отключить все мысли. Инструкции придётся искать самим, потому что всё индивидуально. Один из способов: сконцентрироваться на дыхании. Просто контролировать дыхание. За то время, пока ты его контролируешь напрямую, внутренний диалог не вякнет. Другое дело что в итоге ум всё равно нас обманывает и уводит в сторону, начиная болтовню с собой. Когда же внутренний диалог отключается по настоящему, возникает новое ощущение - лёгкость. Иногда можно реально почувствовать как что-то помимо мозга вмешивается и даёт команду: "Остановить внутренний диалог". Вот к этому надо идти. А вот классический метод, для отдельной тренировки, описанный ещё у Карлоса.

Метки:  

Искусственная жизнь

Понедельник, 21 Мая 2012 г. 01:44 + в цитатник
В этом посте речь пойдёт о принципах построения искусственной жизни на основе ИИ, описанного ранее. Я обнаружил одну важную особенность: каждое действие неразрывно связано с состоянием, в котором его можно применять. Под состоянием (S) понимается все необходимые условия, в которых действие может быть исполнено. Т.е. в неоптимизированном идеальном варианте это совокупность всех параметров мира, в модели которого живёт ИИ. В оптимизированном варианте это только явно необходимые параметры без учета "погоды на Марсе".

Если ИИ нашёл новое сложносоставное действие с помощью анализа лога экспериментов, рассмотренного в предыдущем посте, то он обязан привязать это действие к набору параметров S, при которых оно может быть выполнено. Таким образом, к одному и тому же эффекту (состоянию), могут вести несколько действий, как примитивных, так и составных. Подходящее действие ИИ выбирает исходя из условий, в которых он находится.

Некоторые эффекты воздействий, которые являются целями ИИ, в течение его жизни, должны быть изначально прошиты, для того чтобы он обрёл цель после рождения и начал действовать. Другие эффекты он может сам обозначить целями в ходе движения к какому-то изначально прошитому эффекту.

Пусть A0 - множество всех действий прошитых в ИИ при рождении, а S - состояние системы. Тогда в общем виде алгоритм искусственной жизни будет выглядеть следующим образом.
PHP:

// необходимо достичь предустановленного эффекта S1
1.случайный_перебор_действий(A0S1)
// эффект S1 достигнут, а также найдены многие другие действия и сохранены в множество A1
// необходимо достичь предустановленного эффекта S2
2.случайный_перебор_действий(A0 A1S2)
// эффект S2 достигнут, а также найдены многие другие действия и сохранены в множество A2
// необходимо достичь предустановленного эффекта S1 и есть действие a75 для его достижения в условиях S75
3.случайный_перебор_действий(A0 A1 A2S75)
// достигнуты условия S75, теперь можно выполнять действия для достижения цели S1
4.выполнение_набора_действий(a75)
// эффект S1 достигнут, многие действия откорректированы
...
font>


На шаге 3 и 4 демонстрируется как ИИ выбирает промежуточный эффект S75 в качестве цели для достижения эффекта S1. Теперь о том, что такое случайный_перебор_действий(...) и как он может быть запрограммирован. Всё очень просто:
PHP:

случайный_перебор_действий
(Aмножество действийStцелевое состояние системы)
{
  
Ac найти_действия_приводящие_к_эффекту(ASt)
  
Ss извлечь_начальные_условия(Ac)
  while (
!= St && not(S in Ss))
  {
    
A0[random(LEN(A))]
    
выполнение_примитивного_действия(a)
  }
  if (
== St)
    return;
  if (
S in Ss)
  {
    
найти_действие_по_начальным_условиям(AcS)
    
выполнение_набора_действий(a)
    if (
== St)
      return;
    else
      exit(
"Критическая ошибка, обратитесь к разработчикам.");
  }
}
font>


Функция случайный_перебор_действий(...) всегда должна завершаться удачно, т.е. приводить к искомому эффекту St. Эта функция пытается найти промежуточные точки для перехода к состоянию St и далее перебирает примитивные действия до тех пор пока одна из этих точек не будет достигнута. Если таких точек не нашлось вовсе, эта функция будет делать перебор примитивных действий до тех пор пока не достигнуто условие St.

Конечно же это тоже не боевые условия и надо бы перебирать не примитивные действия, а составные, но с учётом времени их выполнения и адекватности ситуации. Кроме того, в реальных условиях надо учитывать вероятности появления того или иного эффекта при выборе действий. Всё это мы оставим на потом! В этом посте показан только принцип, по которому, на мой взгляд, можно строить искусственную жизнь с искусственным интеллектом.

Метки:  

ИИ: анализатор экспериментов

Суббота, 19 Мая 2012 г. 22:00 + в цитатник
В этом посте я приведу очень простой пример предметной области и алгоритм анализатора экспериментов, указанного в схеме к прошлому посту. Вообще, лог экспериментов - это аналог последовательности команд на языке ассемблера. Поэтому в нём могут быть скрыты условные переходы и циклы за логикой примитивных операций. В данном посте я не рассматриваю варианты поиска циклов и условных переходов в логе экспериментов. Для упрощения понимания сути работы анализатора он будет искать одну единственную каноническую конструкцию - простую последовательность операций. Операция в данном случае означает действие ИИ на объект исследования, выполняемое в ходе эксперимента.

Предметная область
Существует единственный объект исследования, состояние которого описывается набором дискретных параметров. Каждый параметр представляет собой флаг, т.е. может принимать только значения 0 и 1. Для этого объекта допустимо несколько примитивных действий, каждое из которых определённым образом меняет состояние объекта. Изменение состояния объекта имеет внутреннюю логику и недоступно извне. Т.е. объект исследования является для нас "чёрным ящиком". Однако, каждое примитивное воздействие всегда оказывает однозначный простой эффект. Кроме того, существует несколько фиксированных последовательностей команд, которые оказывают на объект новые эффекты. Эти эффекты меняют параметры состояния объекта отлично от примитивных действий.

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

Цель и задача
Анализатор просматривает лог экспериментов и пытается обнаружить все последовательности команд и новые эффекты, которые они оказывают на объект. Полученные наборы действий являются новыми стратегиями поведения ИИ, что есть результат его обучения. Требуется определить все эти наборы действий.

Модель данных
A - это множество примитивных действий, допустимых для объекта исследования.
A = { a1, ..., ax }.
C - это эксперименты, т.е. последовательность наших действий, применяемых к объекту.
C = { c1, ..., cn }, где ci принадлежит множеству действий A.
S - состояние системы после каждого эксперимента. Каждое состояние объекта состоит из m флагов.
S = { s1, ..., sm }, где si может быть 0 или 1.

Если проанализировать последовательности C и S, то можно выявить удачные блоки, приводящие к новым эффектам на множестве S. E = { e1, ..., el } - это искомые последовательности действий, где ei принадлежит множеству команд A = { a1, ..., ax }.

Алгоритм анализа экспериментов
Для начала необходимо сопоставить каждому действию ci эффект, который оно оказывает на объект исследования. Эффект воздействия - это изменение переменных состояния из множества S. Для того чтобы собрать эту информацию введём хранилище эффектов воздействий и обозначим его множеством D.
D = { d1, ..., dx }, где di = { ds1, ..., dsn };
Каждый эффект - это изменение параметров состояния объекта, которое хранится во множестве S и меняется после каждого эксперимента. Обозначим изменение каждого параметра из множества S структурой ds:
dsi = { S[i][j-1], S[i][j] }.
Как видно из формулы, эта структура хранит два состояния параметра S[i] - до эксперимента под номером j и после. Здесь j - номер эксперимента, который лежит в интервале от 1 до n.
Для построения множества D можно использовать следующий простой алгоритм.
PHP:

2
while (j<=&& LEN(D) < x)
{
  
C[j]
  
A[c]
  if (
D[a] == NULL)
  {
    
= {}
    for (
i=1i<=mi++)
    {
      
ds = { S[i][j-1], S[i][j] }
      
d[i] = ds
    
}
    
D[a] = 
  
}
  
j++
}
font>


Этот алгоритм будет правильно работать при условии, что каждое примитивное воздействие всегда оказывает однозначный простой эффект. Это указано в описании предметной области. Если же эффект от примитивного воздействия будет разным, то потребуется учитывать также вероятности этих эффектов в дополнение к множеству D. В этом посте я ограничусь описанием самого простого случая.

Теперь можно анализировать весь лог экспериментов C, чтобы найти в нём последовательности действий приводящие к неожиданным эффектам. Для этого предлагается просматривать лог до появления неожиданного изменения состояния и когда оно будет замечено, сохранить несколько предыдущих экспериментов, привязав их к этому эффекту. В данном случае мы будем запоминать 10 предыдущих экспериментов в список T. Далее продолжаем просматривать лог C и при обнаружении уже запомненного эффекта добавляем ему в соответствие новые 10 предыдущих экспериментов. Делаем так до тех пор, пока для каждого эффекта не накопится достаточно количество появлений и соответствующих экспериментов. В данном случае мы ограничимся 3-мя появлениями каждого эффекта. Три эффекта будем считать уже закономерностью. Теперь для каждого эффекта сравниваем группы экспериментов и, если среди них есть одинаковые последовательности команд, добавляем эти команды в искомое множество E. В целом, псевдокод алгоритма построения множества E выглядит следующим образом.
PHP:

= {} // список неожиданных эффектов
1
while (j<=n// анализируем эксперименты
{
  
C[j]
  
A[c]
  
= {}
  for (
i=1i<=mi++) // формируем d
  
{
    
ds = { S[i][j-1], S[i][j] }
    
d[i] = ds
  
}

  if (
D[a] != d// неожиданный эффект
  
{
    
// запоминаем эффект в другой переменной
    
= []
    
j
    
while (i>=&& i>=j-10// находим 10 предыдущих действий
    
{
      
C[i]
      
A[c]
      
= {}
      for (
k=1k<=mk++) // формируем d
      
{
        
ds = { S[k][i-1], S[k][i] }
        
d[i] = ds
      
}
      
// запоминаем в список t действие a и его эффект d
      
t[LEN(t) + 1] = { a}
      
i--
    }
    
// сохраняем 10 предыдущих действий для эффекта f
    
T[f][LEN(T[f]) + 1] = t
  
}
  
j++
}

// формируем множество E
for (fZin T // f - ключ, Z - значение в коллекции T
{
  if (
LEN(Z) >= 3// является ли это закономерностью?
  
{
    
= [] // элемент искомого множества E
    
Z[1// эталонный образец последовательности, приводящей к эффекту f
    // ищем, где заканчивается одинаковая последовательность действий
    
for (j=2j<=LEN(Z); j++)
    {
      
Z[j]
      
LEN(t)
      do
      {
        
t[i].// действие
        
t[i].// изменение состояния
        
if (== o[i].&& == o[i].d)
        {
          if (
e[LEN(e) + 1] == NULL)
            
e[LEN(e) + 1] = a
        
}
        else
          break
        
i++
      }
      while(
<= LEN(t))
    }
    
E[f] = // добавляем новую стратегию в множество E по ключу f
  
}
}
font>


Вот и всё, множество E построено. Оно содержит последовательности действий, которые приводят новым эффектам. Обратите внимание, что множество E представлено в псевдокоде ассоциативным массивом. В этом массиве каждому ключу f (сам эффект) сопоставлены последовательности действий из множества A, которые приводят к этому эффекту. Таким образом, элементы из множества E можно использовать в качестве новых, теперь уже составных, действий. Эти составные действия можно применять к объекту исследования чтобы добиться какого-либо эффекта f.

Прошу понять, что данный псевдокод может содержать мелкие логические ошибки и в целом я не делал такой реализации. Всё это лишь алгоритмические выкладки, которые являются основой для дальнейшего исследования и совершенствования ИИ. Это именно основа, база, потому что рассмотренная предметная область очень проста и не соответствует реальным задачам. Однако этот пример позволяет понять принцип работы анализатора экспериментов и генерации новых стратегий для ИИ.

Если Вы нашли логические ошибки в псевдокоде или у Вас есть другие ценные мысли по ИИ, прошу писать в комментарии. Спасибо.

Метки:  

Многоагентное программирование

Суббота, 19 Мая 2012 г. 04:35 + в цитатник
Вот подумалось, так что мысли сырые. А что если изобрести такой стиль программирования, где все объекты жили бы в реальном времени и обменивались сообщениями? Представьте себе стратежку типа Старкрафта. В ней юниты и здания - это программные объекты, которые друг с другом взаимодействуют и в итоге чего там строют. Так вот, если программные объекты представить в виде таких же юнитов, то для них можно будет писать функции жизни, а не реакции на события, как в традиционном ООП. Т.е. представлять себе процесс не виде алгоритма, а в виде взаимодействий объектов, как в реальной жизни.

В традиционном ООП есть корневой объект, который создает другие. Те в свою очередь создают ещё более другие и т.д. В предлагаемом подходе нет никаких внешних контролирующих алгоритмов. Это должна делать виртуальная машина, которая ведёт себя аналогично какой-нибудь стратежке, но с более широкими возможностями программирования юинтов-объектов.

Было бы интересно. Просто для фана, поиграться. А потом, глядишь, и выйдет чего.

UPDATE: всё это называется многоагентными системами. Программировать в них можно вот так например.

Метки:  

Принципы самообучающегося интеллекта

Вторник, 27 Марта 2012 г. 07:09 + в цитатник
Я уже начинаю путаться в своих рассуждениях об искусственном интеллекте. Рассуждения эти происходят исключительно в моей голове, поэтому я забываю, где я нахожусь и к чему пришёл. Чтобы не запутаться во всём этом, я решил написать этот пост, в котором постараюсь обозначить исходную точку своих рассуждений.

Суть самообучения нашего маленького виртуального мозга состоит в том, что он анализирует данные о своих экспериментах и на основе этого анализа строит и запоминает алгоритмы успешного поведения. Для упрощения задачи будем считать, что ВИ (виртуальный интеллект) живёт исключительно ради собственных исследований. Его смыслом жизни является постоянное увеличение базы построенных алгоритмов. Новые алгоритмы поведения будем называть "жизненным опытом", а их построение - "обучением".

Что же он умеет? ВИ умеет совершать различные "действия", которых у него в "арсенале" ограниченное количество. С помощью этих действий он может взаимодействовать с внешней средой. Кроме того, ВИ может считывать "ответы" окружающей среды на его действия. Информация от внешнего мира поступает в виде фиксированного набора "параметров". Ядро ВИ не знает ничего об этих параметрах, для него это просто числа. Система ввода-вывода поставляет ВИ параметрические ответы и обеспечивает исполнение действий, которые ей заказывает ядро. При этом система ввода-вывода может расширить набор доступных действий и сообщить об этом ядру ВИ.

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

Итак, наш маленький ВИ поселился в сети и теперь общается в чате с девушками, которые, как обычно, ищут эмоций и не знают, что на самом деле их собеседник является программой. Для упрощения рассказа предположим, что ВИ уже достаточно прошарен в искусстве обольщения и у него в арсенале есть такие сложные действия как "поговорить о погоде", "поговорить о кошках", "распросить девушку музыке", "поговорить о романтических фильмах", "распросить девушку о предпочтениях в сексе", "рассказать о своих увлечениях" и т.д. ВИ может с лёгкостью распознавать эмоции в ответах девушки и преобразовывать их свой числовой формат. Также он умеет распознавать в тексте новую информацию, которую ещё не знает. Её он преобразует в числовой параметр "интерес". Кроме того, ВИ умеет определять текущую тему разговора и отслеживать моменты смены темы девушкой. Ему доступны и другие параметры, которые может предоставить система ввода вывода.

Так как девушки - существа пассивные, наш маленький друг будет инициативным. Он сам ломится к разным девушкам и начинает общение. Он пишет им одну из оригинальных фраз для знакомства, использую действие "познакомиться". Некоторые из них не отвечают или посылают его - их он обходит стороной, реагируя на ответ среды "отказ". Когда же девушка ответила что-то более приветливое, ВИ также адекватно реагирует на это, выбирая одну из тем, на которую он будет раскручивать девушку.
Т.к. никаких знаний о собеседнике на этом этапе у нас нет, начинается случайный перебор возможных действий. Всегда, в условиях полной неизвестности которые были у нас лишь в глубоком детстве, мы используем случайный выбор любого из возможных действий.
Выбрав одну из тем и пообщавшись на эту тему с девушкой, ВИ оценивает ответ среды в виде параметров "интерес", "эмоциональность", "знание", "благосклонность девушки" и возможно некоторых других. ВИ запоминает соответствие его действия ответным параметрам, которые пришли от внешнего мира. Далее ВИ продолжает случайным образом перебирать темы, запоминая параметрические ответы окружающей среды на его действия. Разговор на каждую тему является для ВИ экспериментом. После каждого проведённого эксперимента знаний об объекте исследования, коим для него является девушка, становится больше. ВИ уже не будет говорить с ней о недавнем матче Спартака и ЦСКА, если после предложенной аналогичной темы о футболе девушка написала нечто такое, что все параметры ответа оказались достаточно низкими. Однако, если ответ девушки на какой-либо вопрос оказался, например, эмоциональным и благосклонность при этом не уменьшилась, то ВИ конечно разовьёт эту тему, а также все схожие темы, потому что в таком случае он построит новое поведение:
PHP:

action вызывать_переживания
()
{
  
выбрать_случайную_тему("секс""гарри-поттер""бывший бойфренд""аниме");
  
говорить_на_выбранную_тему();
}
font>


Построение такого поведенческого алгоритма станет возможным, если девушка каждый раз будет эмоционально реагировать на каждую из этих тем. Как же ВИ делает такой вывод не будучи конкретно запрограммированным на данную предметную область? Он анализирует результаты проведённых им экспериментов:
PHP:

выбрать_тему
("секс");
говорить_на_выбранную_тему();
-> 
проанализирована ответная реакция: { интерес: +2эмоциональность: +5знание0благосклонность_девушки}
выбрать_тему("гарри-поттер");
говорить_на_выбранную_тему();
-> 
проанализирована ответная реакция: { интерес: +1эмоциональность: +4знание: +2благосклонность_девушки: +}
выбрать_тему("бывший бойфренд");
говорить_на_выбранную_тему();
-> 
проанализирована ответная реакция: { интерес0эмоциональность: +6знание: +1благосклонность_девушки: +}
выбрать_тему("аниме");
говорить_на_выбранную_тему();
-> 
проанализирована ответная реакция: { интерес: +3эмоциональность: +4знание: +2благосклонность_девушки}
font>


Анализируя этот лог экспериментов ядро ВИ может сделать вывод, что эмоциональность объекта исследования проявляется в этих темах с заметной регулярностью. Значит можно добавить в арсенал новое действие для повышения эмоционального уровня девушки. ВИ только что научился разогревать эту особу! Совершенно самостоятельно написал себе подпрограмму. Думаю, также иногда поступают и люди, набираясь жизненного опыта.
Однако, продолжим рассказ об обольщении После нескольких удачных серий экспериментов ВИ обучился таким действиям как "зазогреть девушку", "приструнить девушку", "поучить девушку", "утомить девушку", "повысить настроение девушки", "разозлить девушку", "заинтересовать девушку" и т.п. После этого ВИ уже стал повсеместно использовать свои новые действия. Теперь он не просто болтает на случайные темы, но и выстраивает их определённые последовательности, желая достичь нужного эффекта. Да уж, всё просчитано наперёд у этих роботов Так вот, теперь ВИ имеет возможность анализировать в логах свои изученные действия! Это ключевой момент, поскольку на данном этапе обучения ВИ перешёл на новый уровень абстракций. Например, теперь он может выяснить, что если сначала "повысить благосклонность" девушки, затем "вызвать интерес" и далее "разогреть", то она, с большой долей вероятности, соглашается прислать свои голые фотки =) Поэтому ВИ построит новое действие "раскрутить девушку на фотки". Этот анализ уже будет произведён с использованием более сложных абстракций, которыми теперь ВИ может оперировать.

Когда ВИ выяснит, что больше никаких странностей за девушкой не замечено и она больше не проявляет неизученного поведения, он закончит общение с ней и перейдёт к поиску других девушек. Почему он так поступает? Потому что живёт ради исследования, т.е. увеличения накопленного опыта Для упрощения объяснения других принципов я в этом посте не рассматриваю. Вот такие они, безжалостные роботы-исследователи

AI (600x668, 10Kb)

Метки:  

Hello World в подарок программисту

Суббота, 10 Марта 2012 г. 01:00 + в цитатник
Моя девушка решила меня порадовать и написала Hello World. Так приятно это!

<input type="button" value=" Нажми меня " ONCLICK="AlertButton()" >
<script>
function AlertButton()
{
window.alert("Hello, World!");
}
</script>

Метки:  

Костыль для асфальтирования

Пятница, 09 Марта 2012 г. 21:41 + в цитатник
- Достаточно ли уделять час своего времени для работы на эгрегор миссии? (для души)
- По началу.
- Как это по началу?
- А потом втянешься и сам будешь хотеть больше.
- А вот правда. Я вот что подумал. Если у меня начинает теряться интерес к работе, значит я в ходе своей деятельности не работаю даже часа в течение дня на свой эгрегор. Т.е. как-то не так работаю. Сразу приходит в голову такой костыль: вырезать этот час из рабочего времени и заниматься в течение часа чем-то интересным для себя. Это должно восстановить баланс.
- Если теряется интерес - значит ты эксплуатируешь старые наработки и не развиваешься. Очень хорошо, что ты это сразу отслеживаешь.
- Разумеется, но асфальт класть надо довольно часто. Это не идеальное решение, это костыль. В идеале нужно было бы сделать асфальтирование интересным. И если я прав, то эта формула подходит для любой рутинной деятельности. Потому что ранее я посвящал рутинным задачам весь день или не работал вообще - это была ошибка.
- Начнешь заниматься чем-то включающим, поработаешь на энергии часика 2, а потом уже можно будет на этой энергии продолжить класть асфальт, насколько ее хватит.
- Только бы сработало!

Метки:  

Мотивация с помощью листа бумаги

Суббота, 11 Февраля 2012 г. 19:59 + в цитатник
Вобщем мотивационный метод использовал такой: берёшь лист бумаги и пишешь там текущие задачи. Слева от каждой задачи рисуешь пустой квадратик как в бланке для голосования. Когда задача будет выполнена, ставишь в квадратике галочку. Листок держишь перед глазами на столе. Очень скоро руки сами полезут выполнять эти задачи. Для меня работает.

Метки:  

О чтении книг

Четверг, 02 Февраля 2012 г. 01:10 + в цитатник
Ещё одна очевидная истина о повышении мотивации в работе:
Чтение образовательных книг о конкретном деле повышает интерес к этому делу.
К.О.

Метки:  

FDT мегасетап

Четверг, 29 Декабря 2011 г. 08:58 + в цитатник
Пару дней ковырялся чтобы настроить IDE для серверной и клиентской части одного проекта. Захотелось мне заставить IDE одновременно работать как серверной так и с клиентской частью чтобы не тратить внимание на переключение между разными средами. Сложность в том, что клиент и сервер на разных языках, соответственно на Флеше и на Питоне. И вот наконец получилось!

В качестве основы взял среду FDT4, потому что она быстрая и на ней уже работает Флеш. Установил в неё PyDev и кучу разных плагинов, в т.ч. для синхронизации с удалёнными серверами. Серверную часть пока запускаю на той же машине, что и клиентскую, но ничто не мешает и править серверный код удаленно потому что есть RSE для Эклипса. Отдельная проблема была с FlashPlayer, потому что для юнит-тестов он совершенно не нужен и его окошко надо было спрятать. Как это сделать нормально пока не знаю, может быть надо писать тесты на Adobe AIR. Я же извратился и вызываю плеер через браузер в одной и той же вкладке, а само окно браузера скрыл навсегда сторонней утилиткой. В результате у меня получилась IDE с двумя консолями и двумя проектами, где ничто не отвлекает от сути.

FDT_setup (700x526, 249Kb)

Метки:  

Optimus - Demo версия

Воскресенье, 04 Декабря 2011 г. 20:44 + в цитатник
Мы закончили работу над демкой игры Optimus online!
Если этот пост вдруг прочитает потенциальный инвестор , добро пожаловать на партнёрский сайт, где выложена демка, скриншоты и инфа об игре.


Метки:  

Мышление есть компиляция

Понедельник, 28 Ноября 2011 г. 12:00 + в цитатник
labirint-mysh-b962 (225x300, 10Kb)
Большая просьба к знающим людям, скажите на верном ли я пути и куда копать?

Меня снова накрывают размышления об ИИ. Продолжаю развивать свою мысль о генерации новой стратегии на основе прожитого опыта. Т.е. есть некий жизненный опыт, который упрощённо можно считать логом команд и изменений состояния системы:
O = { C, S }, где C - это множество наших действий (команд), а S - состояние системы после каждого нашего действия;
C = { c1, ..., cn }, где ci принадлежит множеству команд A = { a1, ..., ax };
S = { s1, ..., sn }, где si = { d1, ..., dy }.

Если проанализировать этот лог, то можно выявить удачные блоки и даже построить из этих данных новые алгоритмы, приводящие к успеху. В общем случае новый алгоритм можно представить в виде функции:
f(p1, ..., pz) = E = { e1, ..., el }, где ei принадлежит множеству команд A = { a1, ..., ax };
f можно представить в виде функции на языке программирования с фиксированным набором параметров p1,...,pz.
Кроме того, есть частный случай, когда z = 0, т.е. функция не параметризированная. Тогда её тело E является всего лишь набором команд, которые могут быть просто фрагментом из лога C.

Задача состоит в том, чтобы разработать метод генерирации E из O. Т.е. преобразование O -> E. Это будет алгоритмом генерации алгоритма.

Метки:  

Понравилось: 1 пользователю

И снова Юпитер

Среда, 23 Ноября 2011 г. 01:09 + в цитатник
Сегодня было очень чистое небо. Юпитер великолепен. Мне показалось что он был больше чем раньше. Сделал с балкона пару фоток через телескоп. Сфотографировать его во всей красе у меня не получается. Но всё же лучше чем раньше. А глазами его вообще отлично видно. Заметно объемную форму, обе полосы и спутники.
jupiter_final (572x377, 30Kb)

Метки:  

Утилитка для компоновки спрайтов в один файл

Понедельник, 17 Октября 2011 г. 15:08 + в цитатник
Многие игровые движки, в частности на флеше, используют для анимации всяких взрывов и других эффектов большие картинки, в которых содержатся все изображения анимированного спрайта. Нормальных цивильных программ для этой простой задачи компоновки я найти не смог.

Есть утилита, которая называется "SpriteImage Composer", очень старая и глючная. Она делает именно то, что требуется и до недавнего времени я пользовался ей. Она сохраняет коллекцию спрайтов в один большой PNG файл. Однако проблема в том, что эти файлы слишком много весят, если хранить в них длительную анимацию. Например, 4 секундный ролик размером 128x128 в таком формате занимает уже более 1 Мб. Если таких анимаций будет много, то суммарный размер данных для игры уже является неприемлемо большим.

Решение придумал следующее. Для анимационных эффектов не особо важна точность деталей картинки, поэтому её можно сжимать с потерями, т.е. в JPEG. Но JPEG не поддерживает прозрачность. Как же быть? А вот как: собираем все спрайты в большую картинку, а потом сохраняем её в виде двух частей. Первая часть - сама картинка анимаций в виде JPG-файла, а вторая - альфа канал, тоже в виде отдельного JPG-файла. Затем в целевом приложении загружаем оба файла, компонуем в единую картинку с прозрачностью и разбиваем по кадрам. Преимущество такого подхода в том, что суммарный размер пары JPG-файлов в несколько раз меньше, чем единая PNG-картинка.

Именно этот подход использует моя крохотная утилитка, написанная под Adobe AIR. Скачать её и использовать может каждый разработчик, столкнувшийся с этой элементарной проблемой: http://code.google.com/p/fire-starter/
Программа является OpenSource'ной - берите и делайте с ней всё, что хотите.


Метки:  

Голос Духа

Суббота, 24 Сентября 2011 г. 20:11 + в цитатник
Сегодня гулял по улицам, пытаясь слушать голос Духа. Прикидывал в какую сторону лучше свернуть с точки зрения Духа. За основу взять чувство облегчения, которое приходит при правильном выборе и напряжение, если выбрал неправильно. Голос его очень тонкий, трудно различить. Но можно! Например, могут возникнуть страхи, которые не имеют отношения к Духу. Всё это надо учиться фильтровать... Интересно, что Дух направлял меня всегда в места с людьми, которые я сам точно обошёл бы стороной, по привычке. Проходя мимо людей возникали какие-то чувства, атмосфера менялась. Прогулка получилась интересной. Если я себя не обманываю и правда могу различить голос Духа, то это для меня великое открытие. Но "голос" его слышится с трудом.

Метки:  

Понравилось: 1 пользователю

Дисциплина != Монотонность

Вторник, 30 Августа 2011 г. 20:04 + в цитатник
Думаю что моя ошибка в том, что я приравнял дисциплину к монотонности. Ведь дисциплина или внутренняя упорядоченность - это возможность стремления к цели, проходя через тернии. Например, если стоит задача поддерживать себя в форме, то это не значит что надо поделить свой день на распорядок и регулярно отжиматься перед завтраком. Это распорядок, но это не дисциплина. Меня пытались этому научить, но мне это не подходит. Ведь есть и другие способы решить ту же самую задачу, например спорт или в Wii можно поиграть )) Мне нужно просто отбросить монотонные методы, но сохранить стремление.

Когда герой идет спасать принцессу проходя тысячу препядствий - это же тоже самое и это интересно. А кому-то лучше делать 20 отжиманий в 7 утра Отжимать принцессу куда интереснее

Метки:  

Синглетоны с вайфайем

Суббота, 06 Августа 2011 г. 04:16 + в цитатник
То что сейчас будет написано возможно противоречит каким-нибудь принципам "правильного" проектирования ПО, так что будьте осторожны ))

Предлагаемый подход родился в моей голове чтобы упростить доступ к объектам классов вида "синглетон". Кто не в курсе, знайте, что это классы с объектами в единственном экземпляре и временем жизни равным (или примерно равным) времени работы программы. Классический подход предлагает передавать их по цепочкам в виде параметров и хранить в объектах-клиентах посредством агрегации (в виде ссылок). Такой подход похож на прокладывание сетевых проводов, где устройства взаимодействуют лишь с соседями, прямо или косвенно соединёнными проводами. Прокладывать провода или же обеспечивать каждый раз передачу синглетона по иерархии геморно. Поэтому предлагается устроить нечто похожее на wifi-сети в проектируемой объектно-ориентированной системе. Сделать синглетоны доступными всем, посредством статической переменной (метода) - почему бы и нет?

Преимущества заключаются в том, что получить доступ к такому синглетону можно из любого другого класса без всяких параметров. Недостаток заключается в отсутствии контроля за состоянием синглетона, т.к. теперь кто угодно в любой момент времени может его изменить. Чтобы исправить этот недостаток, можно разрешить доступ к синглетону только тем классам, для кого он предназначен. Как же это сделать? В разных языках могут быть свои средства, но всегда можно явно прописать в синглетоне названия конкретных классов, а потом проверять их в методе получения синглетона. Можно также извратиться и сделать что-то вроде системы паролей в своей программе, если других языковых средств нет.

Выгода от этого подхода огромна! Нет гемору с параметрами и ссылками!
Подробности описал в этой статье.

Метки:  

Тесты поиска по строкам в AS3

Суббота, 06 Августа 2011 г. 02:56 + в цитатник
Провёл сейчас любопытные тесты поиска по строковому набору из 10 тыс. эл-тов:
DICTIONARY[]: 155 ms
ARRAY[]: 196 ms
ArrayList::getItemIndex(): 19839 ms
VECTOR::indexOf(): 9923 ms

Для 100 тыс. эл-тов:
DICTIONARY[]: 1579 ms
ARRAY[]: 1473 ms
OBJECT[]: 1539 ms
OBJECT::hasOwnProperty(): 2029 ms

Вывод: не надо даже пытаться использовать indexOf(), т.к. он ищет без хеш-таблицы. ArrayList вообще в топку. Dictionary, Array и Object абсолютно идентичны. hasOwnProperty() использовать не надо.

Метки:  

Мы запустили космический аппарат Спектр-Р

Понедельник, 18 Июля 2011 г. 09:21 + в цитатник
Популяризирую интерес к космическим исследованиям
"Ракета-носитель "Зенит-3М" с российской астрофизической обсерваторией для изучения Вселенной "Спектр-Р" стартовала с космодрома Байконур утром в понедельник, 18 июля. Как сообщает пресс-служба Роскосмоса, отделение космического аппарата от разгонного блока "Фрегат-СБ" произойдет около 10:00 по московскому времени.
Астрофизическая обсерватория "Спектр-Р" была создана по заказу Роскосмоса в рамках проекта "Радиоастрон". Разработкой научной аппаратуры занимался астрокосмический центр ФИАН, основным исполнителем стало ФГУП "НПО имени Лавочкина".

Обсерватория создана для исследования различных объектов Вселенной: галактик, квазаров, черных дыр, нейтронных звезд и многих других. Кроме того, аппарат будет заниматься мониторингом солнечной активности.

Планируется, что обсерватория проработает не менее пяти лет."




Видео на эту тему можно посмотреть вот здесь .

Метки:  

х/ф Запрещённый приём

Пятница, 15 Июля 2011 г. 03:07 + в цитатник
Посмотрел сейчас этот фильм и сижу под впечатлениями. Чего в инете про него какую-то фигню пишут? Фильм очень глубокий и депрессивный. Жаль, что у неё не получилось достичь свободы для себя.

Метки:  

Поиск сообщений в eugene20237
Страницы: 6 5 4 [3] 2 1 Календарь