LINUX.ORG.RU

[GNU Robots] кто программирует роботов?


0

0

Давайте делиться кодом! :))

я тут после новости решил немного поразмять моск...

вот что я тут накодил:

;; простенькая функция цикла...
(define (loop th) (if (equal? (robot-feel (car th)) #t) (car th) (loop (cdr th))))

;; функция возвразающая строчку с названием предмета, находящегося перед роботом
(define (what-is-it?) (let ((things '("prize" "food" "space" "wall" "baddie"))) (loop things)))

;; а вот собсно оно... венец творения... искусственный интелект! xD
;; поведение прямое вдоску... робот смотри прямо, если может что-то
;; сделать с предметом перед собой, то делает, если же там пусто или
;; стена, то крутимся по часовой стрелке... если прокрутились на 360
;; градусов, то останавливаемся... попытки двигаться ограничены переменной
;; max-steps, это чтобы робота не заклинило :))

(define (explore max-steps turn-count)
  (if (or (zero? max-steps) 
          (= turn-count 4)) 
      nil 
      (let ((thing (what-is-it?))) 
        (cond ((equal? thing "space") (robot-turn 1) (explore max-steps (+ turn-count 1))) 
              ((equal? thing "wall") (robot-turn 1) (explore max-steps (+ turn-count 1))) 
              ((equal? thing "prize") (robot-grab) (robot-move 1) (explore (- max-steps 1) 0)) 
              ((equal? thing "food") (robot-grab) (robot-move 1) (explore (- max-steps 1) 0)) 
              ((equal? thing "baddie") (robot-zap) (robot-move 1) (explore (- max-steps 1) 0))))))

вообщем-то и всё :) очень забавно смотреть как робот мочит жуков
направо и налево, прям как живой :) надо ещё что-нить придумать
поинтереснее, чтобы он передвигался по пустому пространству,
и искал себе занятие :) хватило бы ему энергии...


А что придумали вы? делитесь давайте!

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

кстати, кто-нить знает, можно ли как-нить там ввод сделать более дружественным?

Cy6erBr4in ★★★
() автор топика

в GNU Robots среда неинтересная. Интересней в операционке или по локальной сети резвиться... лазая через почту и/или уязвимости.. Особенно по сети весело... Но именно поэтому творениями не поделиться - могут посадить :-))

gods-little-toy ★★★
()

Для тех, кому очень не нравится неотформатированный код :)


;; простенькая функция цикла...
(define (loop th) 
  (if (equal? (robot-feel (car th)) #t) 
      (car th) 
      (loop (cdr th))))

;; функция возвразающая строчку с названием предмета, находящегося перед роботом
(define (what-is-it?) 
  (let ((things '("prize" "food" "space" "wall" "baddie"))) 
    (loop things)))

;; а вот собсно оно... венец творения... искусственный интелект! xD
;; поведение прямое вдоску... робот смотри прямо, если может что-то
;; сделать с предметом перед собой, то делает, если же там пусто или
;; стена, то крутимся по часовой стрелке... если прокрутились на 360
;; градусов, то останавливаемся... попытки двигаться ограничены переменной
;; max-steps, это чтобы робота не заклинило :))

(define (explore max-steps turn-count)
  (if (or (zero? max-steps) 
          (= turn-count 4)) 
      nil 
      (let ((thing (what-is-it?))) 
        (cond ((equal? thing "space") 
               (robot-turn 1) 
               (explore max-steps (+ turn-count 1))) 
              ((equal? thing "wall") 
               (robot-turn 1) 
               (explore max-steps (+ turn-count 1))) 
              ((equal? thing "prize") 
               (robot-grab) 
               (robot-move 1) 
               (explore (- max-steps 1) 0)) 
              ((equal? thing "food") 
               (robot-grab) 
               (robot-move 1) 
               (explore (- max-steps 1) 0)) 
              ((equal? thing "baddie") 
               (robot-zap) 
               (robot-move 1) 
               (explore (- max-steps 1) 0))))))

Cy6erBr4in ★★★
() автор топика

открой для себя белку Беркли и черепаху Уолтера.

ничего не придумал... всё давно украдено

p.s. теперь условные рефлексы добавь ;)
p.p.s ещё можешь почитать искуственный интеллект(зелёная такая), я пока только 150 из 1600 осилил :(

dimon555 ★★★★★
()

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

dimon555 ★★★★★
()

интеллектуальные агенты бывают:
-простые рефлексные
-рефлексные, основанные на модели
-агенты, действующие на основе цели
-агенты, действующие на основе полезности

dimon555 ★★★★★
()

обьясните кто-нибудь как заставить этого робота что-нибудь делать.
документация на сайте игры предельно херовая - не понятно ничего.

запускаю в интерактивном режиме, ввожу описаниые в докментации комманды, а реакции никакой.
пробовал сохранять код из этой темы в файл и запускать "$ gnurobots file", мелькало окошко один раз и больше ничего.

A2K
()
Ответ на: комментарий от dimon555

Ух сколько информации сразу :) Спасибо!

насчёт беспокойства тут немного мимо, я так понимаю ты не видел проект gnurobots? это простенькая игрушка, в которой для робота, который может передвираться по карте, необходимо писать простенькие программки на guile (читай scheme)... как не крути, быстрее или медленнее он двигаться не может :) это больше похоже на передвижение шахматной фигуры по доске... вот, можешь глянуть скриншот :)

http://img233.imageshack.us/img233/6742/screenshotyh6.png

про агентов, в моём случае это наврное агент, действующий на основе цели... цель убить всех врагов, собрать все призы и не сдохнуть самому :)

Cy6erBr4in ★★★
() автор топика
Ответ на: комментарий от A2K

О да! знал бы ты как я психовал когда так же безуспешно пытался его расшевелить :))) всё оказалось довольно просто... сначало введи одну команду (robot-turn 1) после этого, как ты уже сказал, моргнёт картинка и можно уже будет рулить роботом, в том числе и используя функции, которые привёл я.

на самом деле не знаю зачем так сделано, довольно сильно сбивает с толку :)

Cy6erBr4in ★★★
() автор топика

А есть, что-нибудь, такое же, но сетевое? С общим сервером? Что бы попутно изучая Lisp/Scheme можно было так, играючи, соревноваться?

anonymous
()
Ответ на: комментарий от Cy6erBr4in

а у робота обзор клетки и перемещение одинаковое время занимают?
(ускориться можно игнорирую обзор, а просто двигаясь и двигаясь... или движение не в пустоту невозможно?)

"space" это белая клетка? т.е. если твой робот будет окружён пробелами, то его заклинит?

если что, то можно двигаться случайно в любом направлении, если вокруг остались белые поля, так рано или поздно сожрёшь весь лабиринт ;)

p.s. это простой рефлексный агент с рандомизацией будет

dimon555 ★★★★★
()
Ответ на: комментарий от A2K

если ты собирал из исходников, то каталог doc есть в каталоге исходников, очень странно что он не инсталируется. В нём есть файл Robots-HOWTO... собсно я думаю ты уже читал его :)

Cy6erBr4in ★★★
() автор топика
Ответ на: комментарий от dimon555

> а у робота обзор клетки и перемещение одинаковое время занимают?

тут вот какое дело... время-то они одинаковое занимают, но по-разному расходуют энергию робота... просмотр клетки отнимает одну единицу, а перемещение/поворот две единицы, но! просто так переместиться не получится, если это "приз" или "еда", то их можно либо взять, либо растрелять (в первом случае они прибавят соответствующие параметры, во втором же просто исчеснут)... если же на пути "враг", то его можно только растрелять, при этом если попытаться перейти на клетку где он находится, то отнимаются единицы брони.

Спасибо за наводку, попробую поискать что-нить по поводу "рефлексивных агентов с рандомизацией" :)

Cy6erBr4in ★★★
() автор топика
Ответ на: комментарий от Cy6erBr4in

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

вот пока у меня такие мысли... надо будет это всё теперь запрогроммировать :)

Cy6erBr4in ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.