LINUX.ORG.RU

Сообщения pseudo-cat

 

Thinning алгоритм

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

#2A((0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0)
    (0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0)
    (0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0)
    (0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0)
    (0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0)
    (0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0)
    (0 0 0 1 1 1 1 0 1 1 1 1 0 0 0 0)
    (0 0 0 1 1 1 1 0 0 1 1 1 0 0 0 0)
    (0 0 1 1 1 1 0 0 0 1 1 1 1 0 0 0)
    (0 0 1 1 1 1 0 0 0 1 1 1 1 1 0 0)
    (0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0)
    (0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0)
    (0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0)
    (1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1)
    (1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1)
    (1 1 1 1 0 0 0 0 0 0 0 0 0 1 1 1)) 
превратилось в:
   ((. . . . . . . . . . . . . . . .)
    (. . . . . . . . . . . . . . . .)
    (. . . . . . . . . . . . . . . .)
    (. . . . . . . . . . . . . . . .)
    (. . . . . . @ @ @ . . . . . . .)
    (. . . . . @ @ . . @ . . . . . .) ;A
    (. . . . . @ . . . . @ . . . . .)
    (. . . . @ . . . . . @ . . . . .)
    (. . . . @ . . . . . @ . . . . .)
    (. . . . @ . . . . . @ . . . . .)
    (. . . @ . . . . . . @ @ . . . .)
    (. . . @ @ @ @ @ @ @ . . @ @ . .) ;B
    (. . @ . . . . . . . . . . @ . .)
    (. . @ . . . . . . . . . . @ . .)
    (. @ . . . . . . . . . . . . . .)
    (. . . . . . . . . . . . . . . .))
Видны артефакты в строчках A и B. Вопрос в следующем - в алгоритме используются правила для удаления пикселей, и по этим правилам такие артефакты проходят или я где-то ошибся? Описание алгоритма короткое и простое, посмотрите плз кому не лень, просто есть ощущение что я чего-то очевидного не замечаю.

p.s. Внёс поправку - там где у них считается A(P1):

where A(P1) is the number of 01 patterns in the ordered set P2, P3, P4, - • - P8, P9 that are the eight neighbors of P1

добавил P9 -> P2, без этого бред получался, наверное у них просто неточность.

p.p.s. по идее если так и должно быть то нахрен такой алгоритм вообще нужен, но это маловероятно, учитывая что на него ссылаются в других работах.

 ,

pseudo-cat
()

Potential Fields

Помогите разобраться с потенциальным векторным полем, читаю вот это - http://students.cs.byu.edu/~cs470ta/goodrich/fall2004/lectures/Pfields.pdf и там градиент определяется как:

(xG; yG) - позиция цели
r - радиус цели 
v = [x; y]T - позиция агента
d - дистанция от v до (xG; yG)
µ - угол

определение градиента: 
if d > s + r, dx = a*s*cos(µ) and dy = a*s*sin(µ)
ниже в объяснении про s:

The field has a spread of s and the agent reaches the extent of this field when d = s + r.

Не понимаю что такое s. Если это величина распространения(скорость), то как её можно складывать с r. Если это потенциал, то тоже самое. А так _как_ от s зависит градиент, то это не может быть расстоянием, а больше подходит на роль напряжённости или силы.

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

 , potential field

pseudo-cat
()

кто-нибудь хочет поучаствовать в https://helloworldopen.com?

https://helloworldopen.com

Хочу попробовать, just for fun, может наберёться еще пара таких же как я? Не имею опыта в AI, так что на победу не рассчитываю, но устроить мозговой штурм чтобы просто посмотреть чего можно добиться в сжатые сроки, интересно!

 ,

pseudo-cat
()

Как вы логируете формулы.

Вот, к примеру, у меня есть формула в коде и я хочу залогировать её вычисление, скажем, в LaTeX. В моём любимом CL я могу сделать одну сущность, которая будет и логировать и вычислять, благо макросы. В F#, где появилась такая необходимость на самом деле, я разделяю логгер и вычисление, потому что писать свой интерпретатор формул слишком не оправданно, но может есть что-то готовое(в том числе и в других ЯП)? Для тех кто ничего не понял, вот пример:

let a = boost 
let s = region.length
let t = (vmax.mhs - v0.mhs) / a
let s0 = v0.mhs*t + a*pw(t)/2.0
        
/// LaTeX
let latex = Latex.Latex()
["v_{max}",vmax.mhs; "v_{0}",v0.mhs; "a",a; "s",s; "t",t; "s_{0}",s0] 
|> List.iter (fun (s,v) -> latex.env.add(s,v))
latex.comp.add  @"t=frac{$v_{max}-$v_{0}}{$a}"
let res = latex.ToString()
// res: "t=frac{25-25}{0,8}"

 ,

pseudo-cat
()

имитация электрических схем

Есть в СИКП глава по имитации электрических логических схем. Там суть в том, что есть логический сигнал 0 или 1, передающее элементы - провода и элементы изменяющее его, которые оперируют с сигналами на входящих проводах и устанавливают на исходящих. Так же есть расписание, в которое добавляются следующие прохождения сигналов по проводам. Всё красиво и круто и я не раз уже возвращаюсь к этой программе, меняя и расширяя кое-что. Но каждый раз ловлю затык как только пытаюсь сделать по такой же схеме имитацию простых электрических схем, где есть источники питания и цепи протекания тока. Мне не нужно считать падения напряжения и переходные процессы, но простым логическим сигналом, не имеющем полярности, уже не обойтись

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

Может у кого-нибудь свежие идеи или кто-нибудь занимался подобным?

На всякий случай простой прототип - http://pastebin.ru/LQE6h4ax

 , ,

pseudo-cat
()

common lisp eval form

Всем привет, а как можно сделать динамический binding в выражении, к примеру, чтобы выполнялся код наподобие

(let ((form '(+ a 1)))
  (let ((a 3))
     (eval form)))

Нужно здесь -

(defmacro cond-it (&body body)
  `(loop for (p clause) in ',body
	 for it = (eval p)
	 when it
	   do (let ()
		(declare (special it))
		(return (eval clause)))
	 finally (return nil)))

 , ,

pseudo-cat
()

Алгоритм need help

Дерево состоит из узлов вида

Node(MD, parent, next, depends)
md - некоторые данные, суть их не важна
parent - предок (Node)
childs - список потомков (Node list)
depends - список Node
Есть функция P(MD1, MD2), которая возвращает true или false. А также функция M(MD1, MD2), которая модифицирует MD1 таким образом, что P(MD1, MD2) = true. Если в Node1.depends есть Node2, то в Node2.depends будет Node1. Для простоты описания можно считать, что P(Node) = P(Node.MD)

Желаемый результат для каждой Node:

  • P(Node, Node.parent)=true
  • P(Node, Node.childs)=true; 0<i<length(Node.childs)
  • P(Node, Node.depends)=true; 0<i<length(Node.childs)
  • минимизировать количество случаев, когда не соблюдаются условия выше

Доп. информация:

  • M(Node, Node.parent) может изменить результат P(Node, Node.childs) либо для всех i, либо не для одного.
  • M(Node, Node.childs) может изменить результат P(Node, Node.parent), а может не изменить

Кто силён в деревьях, помогите сделать алгоритм, который будет гарантировано сводить нежелательные результаты для каждой Node к минимуму.

 alghorithm, ,

pseudo-cat
()

Математика, автоматизация рутины

Я иногда попиливаю свой helper-for-use-only-by-me пакет и вот недавно захотелось добавить простую функциональность из аналитической геометрии(раньше я думал что это просто школьная геометрия, но тут мне открыли глаза:)). Нет, я и раньше добавлял кое какую простую математику в свои проекты, но то было довольно примитивные задачи. Я искал руками решение уравнения и забивал это решение в код, где с одной стороны было неизвестное, а с другой полностью вычислимое, на момент вызова.

Так вот, на данный момент мне надо решить систему 3х уравнений с 2 неизвестными. Итого получается для нахождения 1 неизвестного относительно другого нужно составить 9 уравнений. Это много, ведь так? Вопрос к практикующим в программировании математику, как вы решаете такие задачи? Вот система, в которой l и m - искомые переменные:

[ x0+l*p = x1+m*p1
[ y0+l*q = y1+m*q1
[ z0+l*r = z1+m*r1
Вот табличка, из которой видно сколько возможных путей решения мы имеем:
+-----+-----------------+------------------+-----------------+---------------+
|     |        m        |        p         |        q        |     r         |
+-----+-----------------+------------------+-----------------+---------------+
| l   |                 |  (x1+m*p1-x0)/p  | (y1+m*q1-y0)/q  |(z1+m*r1-z0)/r |
+-----+-----------------+------------------+-----------------+---------------+
| p1  | (x0+l*p-x1)/p1  |                  |                 |               |
+-----+-----------------+------------------+-----------------+---------------+
| q1  | (y0+l*q-y1)/q1  |                  |                 |               |
+-----+-----------------+------------------+-----------------+---------------+
| r1  | (z0+l*r-z1)/z1  |                  |                 |               |
+-----+-----------------+------------------+-----------------+---------------+

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

 , , ,

pseudo-cat
()

F# match

Может это я туплю, но вроде же всё верно:

match moved |> List.exists (fun a -> wire.Equals(a)) with
| true | _ when wire.length <= 1.0 -> 
    x.scaleWireToElement p lpc wire |> ignore
| false ->
    x.moveWireToElement p lpc wire |> ignore

но валится с incomplete pattern, когда результат true

 

pseudo-cat
()

пересечение прямых

Помогите вывести уравнение для пересечения 2х прямых в пространстве. Моя попытка как-то не удалась.

 (x-xo)/p=(y-yo)/q=(z-zo)/r
 (x-x1)/p1=(y-y1)/q1=(z-z1)/r1

 x=(xo*q*p1 - x1*q1*p - yo*p*p1 + y1*p*p1) / (q*p1-q1*p) 
 y=(yo*p*q1 - y1*p1*q - xo*q*q1 + x1*q*q1) / (p*q1-p1*q)
 z=(zo*q*r1 - z1*q1*r - yo*r*r1 + y1*r*r1) / (q*r1-q1*r)
Вот пример вывода для x, в нём я приравниваю всё к 0, взяв z=z0, что было слизано отсюда
 1. (x-xo)/p=(y-yo)/q=(z-zo)/r
 (x-x1)/p1=(y-y1)/q1=(z-z1)/r1
 2.z=z0; вот так, наверное, делать нельзя
 (x-xo)/p=(y-yo)/q = 0
 (x-x1)/p1=(y-y1)/q1 = z0-z1/r1
 3. y=(x-xo)*q/p+yo
 y=(x-x1)*q1/p1+y1 
 4. (x-xo)*q/p+yo=(x-x1)*q1/p1+y1
 5. (x-xo)*q*p1+yo*p*p1=(x-x1)*q1*p+y1*p*p1
 6. x*(q*p1-p*q1)=xo*q*p1-x1*q1*p-yo*p*p1+y1*p*p1
 7. x=(xo*q*p1-x1*q1*p-yo*p*p1+y1*p*p1)/(q*p1-p*q1)

 ,

pseudo-cat
()

Алгоритм пересечения фигурв пространстве

Подскажите, пожалуйста, как мне узнать, что две плоских фигуры пересекаются в пространстве. Воспоминания о тригонометрии подсказывают, что надо искать пересечения проекций этих фигур на оси. То есть, если все три проекции XY XZ YZ пересекаются, то и фигуры пересекаются. Так как реализация будет применяться в алгоритме с порядком роста n^2, хочется сделать не совсем тормозной алгоритм, то есть грамотно использовать всякие там боундинг бокс, ну и что ещё в таких случаях используют.

 , ,

pseudo-cat
()

Нейронные сети, ассоциативная память

Вырвано из контекста:

Если ключевые образы набора имеют вид xj = x0 + v, где v - некоторый стохастический вектор, то, вероятнее всего, память распознает вектор x0 и ассоциирует его с вектором y0, а не с вектором из фактического множества образов, использованных в процессе обучения. Здесь x0 и y0 - никогда ранее не виденная пара сигналов.

из текста следует, что x0 - константа, содержащаяся в каждом входном векторе при обучении. Тогда, если после обучения подать на вход x0+v', мы получим ответ фактически на x0, то есть составляющая v в ключе учитывается намного слабее чем x0. Так? Почему?

Я думал, что если x0 - константа, содержащаяся во всех входных наборах при обучении, то (если считать, что после обучения на вход подают сигналы x0+v') это будет равносильно следующему - обучать входными наборами xj = (x0 + v) - x0 = v, после обучения подать на вход v'. То есть x0 ни на что не влияет при выборке по ключу, так как по сути является просто точкой отсчета для обучения, как несущая частота, на которую накладывают сигнал.

 ,

pseudo-cat
()

микроконтроллеры, прошу краткий ликбез

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

 , ,

pseudo-cat
()

Оптимизация поиска _наличия_ общего элемента 2х списков

интересно как можно оптимизировать по времени, наверняка с лёту накидаете кучу крутых вариантов с параллельными последовательностями и прочими заумными вещами) Вот пара простых вариантов:

type Comparer<'a>(f) =
    interface System.Collections.Generic.IEqualityComparer<'a> with
        member x.Equals(a, b) =
            f a b
        member x.GetHashCode(a) = hash(a.ToString())

let haveIntersection eq (l1 : 'a list) l2 =
    l1 |> List.exists (fun a -> l2 |> List.exists (fun b -> eq a b))

let _haveIntersection eq (l1 : 'a list) l2 =
    l1.Intersect(l2, Comparer<'a>(eq)).Any()

let l1 = [1L .. 10000L]
let l2 = [1L .. 10000L]

let eq a b = a = b && a = 10000L

> _haveIntersection eq l1 l2;;
Real: 00:00:00.007, CPU: 00:00:00.000, GC gen0: 0, gen1: 0, gen2: 0
val it : bool = true
> haveIntersection eq l1 l2;;
Real: 00:00:06.355, CPU: 00:00:06.328, GC gen0: 0, gen1: 0, gen2: 0
val it : bool = true

 , .net,

pseudo-cat
()

http запросы

Есть страника(html), на ней вызывается

battleform.submit()
, после чего я вижу два запроса - один, как и ожидается, POST-запрос этой формочки, а второй GET-запрос непонятно откуда берется и конкретно для этой страницы имеет вид:
Request URL:http://www.ganjawars.ru/b0/bticker.php?b=1201080712&t=0&checks=319670,1877964,1481074,1005533,1726924,2097967,1860733&load=1369840085&die=1
Request Method:GET
Status Code:200 OK
Request Headersview source
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding:gzip,deflate,sdch
Accept-Language:ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4
Connection:keep-alive
Cookie:bt_cookie=work; uid=1746924; up=4eadf0f30537e6780baa; uip=83.153.10.09; bp=216e01e90caa32b14d1b; session_id=851; user_res=1366x768; au=1726924; luid=1746924; luids=f0a30; last_user_name=qwerty_user; ipkey=2211f; ip_alert=0; authtime=1369753524; authtime_sign=cfbf8; sidp=fb172; sid_ok=1; version=ok; bversion=ok
Host:www.ganjawars.ru
Referer:http://www.ganjawars.ru/b0/b.php
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36
Query String Parametersview sourceview URL encoded
b:1201080712
t:0
checks:319670,1877964,1481074,1005533,1726924,2097967,1860733
load:1369840085
die:1
Response Headersview source
Connection:keep-alive
Content-Encoding:gzip
Content-Type:text/html; charset=windows-1251
Date:Wed, 29 May 2013 15:08:06 GMT
Server:nginx/1.2.4
Transfer-Encoding:chunked
X-Powered-By:PHP/4.4.7
По параметрам не понятно откуда берутся эти -
load=1369840085&die=1

Вопрос - что провоцирует этот GET-запрос?

п.с. запросы смотрю в Google Chrome Developer Tools(Network)

 , ,

pseudo-cat
()

Посоветуйте последних статей по CS

На английском, что-то не совсем заумное, что бы читать можно было. Не большие. Не старше 3х лет.

нужно на экзамен

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

 

pseudo-cat
()

Имитация отправки формы

подскажите пожалуйста, есть форма -

<form action="http://some/b0/b.php" method="post" id="battleform" name="battleform"></form>
<input type="hidden" name="fightit" value="2">
<input type="hidden" name="fightvl" value="10">
<input type="hidden" name="turn" value="2">
<input type="hidden" name="bid" value="1200310820">
<input type="hidden" name="5b807" value="8361e">

дальше идут не hidden инпуты, куда и вводится полезная информация. На странице есть такой яваскрипт -

<script language="javascript">
right_attack_value=0; right_attack_required=1;
left_attack_value=0; left_attack_required=0;
enemyis=false;
check_grenade=0;
defend_value=0;
attack_type=0;
function rightattackcheck() {  attack_type=1;  right_attack_value=1; }
function leftattackcheck() {   attack_type=1;  left_attack_value=1;  }
function defencecheck() {  defend_value=1; }
function enemycheck() { enemyis=true; }
function drawlineclick(uid) {
 enemycheck();
 var optionlist = document.getElementById('euids').options;
 for (var option = 0; option < optionlist.length; option++ ) {  if (optionlist[option].value == uid) { optionlist[option].selected = true; break; } }
 }
function fight() {
bad=0;
rav=right_attack_value;
lav=left_attack_value;
if (check_grenade==1) {
if (document.forms.battleform.use_grenade.checked==true) { rav=1; lev=1; attack_type=1; }
			}	
if (attack_type==0) { s="Выберите способ атаки"; bad=1; } else {
   if ((right_attack_required==1) && (rav==0)) { s="Укажите, куда стрелять из оружия в правой руке"; bad=1; }
   if ((left_attack_required==1) && (lav==0)) { s="Укажите, куда стрелять из оружия в левой руке"; bad=1; }
   }
document.forms.battleform.fightit.value="3";
if (defend_value==0) { s="Решите, как будете уворачиваться"; bad=1; }
if (bad==1) { alert(s); }  
else {
s="c6548b8c1f5b471e9cd1c0b357018107";
document.forms.battleform.fightvl.value=s;
document.forms.battleform.fightit.value=s;
if ((document.forms.battleform.fightvl.value==s) && (document.forms.battleform.fightit.value==s)) 
  { 
  document.forms.battleform.submit();
  }
 }
}
</script>

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

С вебом почти не знаком, пожалуйста проще

 ,

pseudo-cat
()

рефакторинг, как вам?)

то что было написано в первой версии программы - http://pastebin.com/GwpdKBdQ

было свежепереписано - http://pastebin.com/g8kmdq27

кто нибудь может так же несмешно пошутить?)

 code practicals, , ,

pseudo-cat
()

курсы про гугломобиль.

помогите найти видеокурс про гугловский авто с субтитрами (artificial inteligence for robotics). У меня есть, но на слух сложновато схватывать.

Перемещено tazhate из development

 , ,

pseudo-cat
()

паника. Сделать так, чтобы member вычислялся 1 раз

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

type AAA with
    member x.arrows_md_table = ArrowMDTable.makeArrowMDTable(x)
ArrowMDTable.makeArrowMDTable(x) вычисляется каждый раз при вызове arrows_md_table у AAA, что совсем не требуется. Нужно именно расширить тип ААА, непосредственного доступа к нему нет, чтобы изменить! Как это сделать?

 

pseudo-cat
()

RSS подписка на новые темы