eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingProlog i hierarchiczna baza faktów
Ilość wypowiedzi w tym wątku: 52

  • 41. Data: 2014-05-28 00:02:52
    Temat: Re: Prolog i hierarchiczna baza faktów
    Od: Edek <e...@g...com>

    Dodam, że chętnie pogrzebię w literaturze i podzielę się tym co znajdę,
    temat mnie i tak interesuje, ale przydałaby się precyzyjna definicja
    problemu, z kompletnymi przykładami. Jeżeli nie są tajne oczywiście.

    --
    Edek


  • 42. Data: 2014-05-28 00:13:36
    Temat: Re: Prolog i hierarchiczna baza faktów
    Od: Edek <e...@g...com>

    Szarym od mżawki świtem Sun, 25 May 2014 15:00:03 +0100, Andrzej Jarzabek
    wyrzucił pustą ćwiartkę i oznajmił:

    > On 25/05/2014 03:27, A.L. wrote:
    >> On Sun, 25 May 2014 01:58:13 +0100, Andrzej Jarzabek
    >> <a...@g...com> wrote:
    >>> On 24/05/2014 22:43, Sebastian Biały wrote:
    >>>> On 2014-05-24 19:09, A.L. wrote:
    >>>>> jakiego rodzaju to sa zapytania (przykaldy).
    >>>> "Kto mieszka na ulicy X i ma blond włosy".
    >>> Do takich zapytań świetnie nadaje się SQL.
    >>
    >> Owszem, ale nie wszystko da sie zalatwic przy pomocy SQL.
    >
    > Chodziło mi o to, że jeśli SQL się nie nadaje, to powinno się myśleć i
    > podawać przykłady zapytań, do których SQL się nie nadaje.

    NoSQL tak samo się nie nadaje jak SQL, ale to zależy.

    Bottom line, można za pomocą bazy stworzyć graf i adekwatnie
    tworzyć cząstkowe zapytania -
    samo SQL jak ktoś zauważył nie ma takich możliwości, co
    nie znaczy, że bazy nie da się użyć. Zostają pytania o
    wydajność i wygodę. W ogóle, zależnie od problemu możemy
    mieć graf (dwie tabele: sam graf i tabela "rodzajów") albo
    wiele tabel (stała struktura rodzajów relacji, żeby zrobić
    to co sugerowane, czyli "where a.ulica = x and włosy = blond
    order by neigbourhood_distance").

    Tak czy inaczej: SQL + kod, nie samo SQL. SQL dostarcza relacji
    i często wydajnych operacji Boolean na zbiorach wyników,
    NoSQL nie ale takie Mongo potrafi wykonać JS na serwerze.

    Zależnie od problemu, albo mamy gotowe relacje i da się, albo
    mamy graf i baza jest nieco nadmiarowa.

    --
    Edek


  • 43. Data: 2014-05-28 02:57:26
    Temat: Re: Prolog i hierarchiczna baza faktów
    Od: A.L. <a...@a...com>

    On Tue, 27 May 2014 21:52:30 +0000 (UTC), Edek
    <e...@g...com> wrote:

    >Szarym od mżawki świtem Thu, 22 May 2014 21:48:04 +0200, Sebastian Biały
    >wyrzucił pustą ćwiartkę i oznajmił:
    >
    >> Mam takie zagadnienie abstrakcyjne.
    >
    >Nie ty pierwszy - poczytaj zanim się zabierzesz do tematu.
    >Oprogramowanie potrafiące "przeczytać" książkę w miarę techniczną
    >potrafiło zbudować bazę faktów i na jej podstawie odpowiadać
    >na proste pytania przed albo około 2000,

    We wczesnych latach 80. Wspomniany przeze mnie Cullingford wlasnie
    wtedy sbudowal system ktory potrafil czytac historyjki polityczne z
    New York Times, pzretranslowac na baze wiezy i odpowiadac na dosyc
    zlozone pytania na ich temat.

    Link do artykulu zamiescilem

    Bardziej prymitwmy system zrobil niejaki Fisher Black, w roku chyba
    1968. Bez analizy jezyka naturalnego, ale za to z projektem bazu
    wiedzy ktore (jak sadze) byla natchnieniem dla Cullingorda

    A.L..


  • 44. Data: 2014-05-28 03:05:32
    Temat: Re: Prolog i hierarchiczna baza faktów
    Od: A.L. <a...@a...com>

    On Tue, 27 May 2014 22:02:52 +0000 (UTC), Edek
    <e...@g...com> wrote:

    >Dodam, że chętnie pogrzebię w literaturze i podzielę się tym co znajdę,
    >temat mnie i tak interesuje, ale przydałaby się precyzyjna definicja
    >problemu, z kompletnymi przykładami. Jeżeli nie są tajne oczywiście.

    Owszem, popieram. Definicja problemu jest bardzo "rozmyta"

    A.L.


  • 45. Data: 2014-05-28 08:23:42
    Temat: Re: Prolog i hierarchiczna baza faktów
    Od: Roman W <b...@g...pl>

    On Tue, 27 May 2014 19:57:26 -0500, A.L. <a...@a...com> wrote:
    > Bardziej prymitwmy system zrobil niejaki Fisher Black, w roku chyba
    > 1968. Bez analizy jezyka naturalnego, ale za to z projektem bazu
    > wiedzy ktore (jak sadze) byla natchnieniem dla Cullingorda

    Chyba nie ten Fisher Black od modelu Blacka-Scholesa?

    RW


  • 46. Data: 2014-05-28 09:20:44
    Temat: Re: Prolog i hierarchiczna baza faktów
    Od: Andrzej Jarzabek <a...@g...com>

    On 27/05/2014 23:13, Edek wrote:
    > Szarym od mżawki świtem Sun, 25 May 2014 15:00:03 +0100, Andrzej Jarzabek
    > wyrzucił pustą ćwiartkę i oznajmił:
    >
    >> Chodziło mi o to, że jeśli SQL się nie nadaje, to powinno się myśleć i
    >> podawać przykłady zapytań, do których SQL się nie nadaje.
    >
    > NoSQL tak samo się nie nadaje jak SQL, ale to zależy.

    Coś przegapiłem, czy jednak NoSQL nie jest językiem zapytań do bazy?


  • 47. Data: 2014-05-28 14:41:08
    Temat: Re: Prolog i hierarchiczna baza faktów
    Od: A.L. <a...@a...com>

    On Wed, 28 May 2014 07:23:42 +0100, Roman W
    <b...@g...pl> wrote:

    >On Tue, 27 May 2014 19:57:26 -0500, A.L. <a...@a...com> wrote:
    >> Bardziej prymitwmy system zrobil niejaki Fisher Black, w roku chyba
    >> 1968. Bez analizy jezyka naturalnego, ale za to z projektem bazu
    >> wiedzy ktore (jak sadze) byla natchnieniem dla Cullingorda
    >
    >Chyba nie ten Fisher Black od modelu Blacka-Scholesa?
    >
    >RW

    Zupelnie inny. I calkiem dzis zapomniany

    A.L.


  • 48. Data: 2014-05-28 20:35:23
    Temat: Re: Prolog i hierarchiczna baza faktów
    Od: Sebastian Biały <h...@p...onet.pl>

    On 2014-05-27 23:52, Edek wrote:
    > Nie ty pierwszy - poczytaj zanim się zabierzesz do tematu.
    > Oprogramowanie potrafiące "przeczytać" książkę w miarę techniczną

    Nie analizuje języka naturalnego.

    > Hierarchiczną? Czy punkt a jest b czy b nad a i dlaczego?

    Ponieważ niezygle czesto wystepują tam zalezności "coś jest wewnątrz
    czegoś". Z programowania to oznacza częste relacje parent<->child
    wyrażone z relacji między obiektami w pamięci. Myślę że to dość istotna
    obsewacja.

    > Sformułuj
    > najpierw problem. Nie ja jedyny chętnie bym zobaczył drobny przykład,
    > albo kilka, które pokazywałyby w czym jest problem.

    To nie jest trywialne. Rzeczywisty problem jest - powiedzmy - komercyjny
    i nie bardzo mogę go przedstawić w naturalnej postaci.

    > Domena nie gra
    > roli, może być "jakie kfiatki rosną nad rzeczką w której pływał
    > pstrąg którego zjadł złodziej kradnąc go z marketu".

    Sprawdze czy mogę przygotowac probkę danych.

    > - to jest graf. Nie chce mi się uzasadniać.

    Zgadzam sie, jednak przypuszczam że sensowniej będzie powiedzieć: to
    wiele grafów, niekoniecznie zaleznych od siebie, pracujące na wspólnych
    węzłach.

    > - nie widzę hierarchii

    "hierarchia" oznacza że mam taką strukture wejściową w formie relacji
    elementów wlasnie tak zapisaną (dla bardzo ciekawskich: obiekty w C++
    mające "iteratory na dzieci", oraz relacje przez indeksy w mapach). Mogę
    ją przekształcić do dowolnej postaci oczywiście.

    > Sam SQL nie, ale tak w kwestii technicznej zacząłbym (co już było) od
    > pytania "co trzeba zrobić i jak" a potem wybrał narzędzia. Może SQL,
    > który sam w sobie nie ma takich możliwości, da się użyć tworząc serię
    > zapytań a wtedy podstawową strukturę grafu ma się za free. Pytanie
    > też ile tych danych jest i czy trzeba trzymać je na dysku. Czyli aspekty
    > techniczne, w tym kopanie się z koniem Prologiem, którego się nie zna.

    Danych jest *bardzo* dużo, powiedzmy ze zajmuja solidne gigabajty w
    pamięci. Jednak relacji nie ma za wiele, w dodatku mają taką cechę że
    raczej układają się w gęste grupy powiązane dość luźno między sobą.
    Istnieje widoczne lokalne zagęszczenie.

    > Jeżeli nauczenie się Prologu zajmuje 12-18 miesięcy do tego przeczytanie
    > książki, pytanie jest: czy problem jest na tyle rozbudowany, żeby poświęcać
    > na niego tyle czasu. Drugie: nawet jeżeli tak, to czy nie lepiej odpuścić
    > Prolog i zaimplementować struktury danych i algorytmy samemu z pomocą
    > dostępnych bibliotek, a czas poświęcić na przeszukanie dostępnych źródeł
    > wiedzy na temat problemu.

    Szukam metod wielowątkowo. Z mojej strony zrobiłem już pewne fragmenty w
    C++ (oryginalne struktury pamięciowe są w nim wlasnie), w javascripcie,
    zrzuciłem do standardowej bazy danych SQL. Te etapy mam wstepnie za
    sobą. Przy czym *bardzo* istotny element to wlasnie umozliwienie
    koncowemu userowi grzebanie w "zapytaniach".

    > Niestety nie znam dostępnej literatury, ale google scholar wypluwa
    > po kilkadziesiąć tysi publikacji, trzeba poświęcić trochę czasu na
    > dospracowanie zapytań, wybrać przeglądowe prace na początek, albo
    > dać konkretny przykład Panu A.L.

    Zgadza się, wiele przeszukałem sieci zanim zadałem pytanie, ale utopiłem
    się w ilości zagadnień o ktorych mam nikłe pojęcie. Interesuje mnie
    głównie filtr który pozwoli mi zawężyć zakres literatury. Przypuszczam
    że prologowcy mają o tym największe pojęcie.

    > Powiedz od razu, że chcesz się nauczyć Prologa

    Nie chcę :). Ale mam wrażenie, że ten język będzie po prostu godny uwagi
    w tym zastosowaniu.

    >, po co zarzucasz jakiś
    > abstrakcyjny temat... żartuję, ale może najpierw problem potem narzędzie.

    Problem już został wstepnie rozwiązany w C++ i tam mam najbardziej
    rozbudowane "zapytania" eksperymentalne. Niestety wygląd kodu ukrywa
    intencje (więcej emulacji logiki niż sensu zapytania). Chcę zrobić
    eksperyment z językiem zorientowanym logicznie aby sprawdzić czy będzie
    bardziej czytelny. Nie jestem tez zadowolony z mojej "bazy danych" i mam
    przeczucie że zmiene jej organizacji może coś pomóc. Tu muszę szeroko
    poczytać o innych organizacjach baz danych.

    Nie jestem ograniczony czasowo.


  • 49. Data: 2014-05-28 23:54:36
    Temat: Re: Prolog i hierarchiczna baza faktów
    Od: Andrzej Jarzabek <a...@g...com>

    On 28/05/2014 19:35, Sebastian Biały wrote:
    > On 2014-05-27 23:52, Edek wrote:
    >
    >> Hierarchiczną? Czy punkt a jest b czy b nad a i dlaczego?
    >
    > Ponieważ niezygle czesto wystepują tam zalezności "coś jest wewnątrz
    > czegoś". Z programowania to oznacza częste relacje parent<->child
    > wyrażone z relacji między obiektami w pamięci. Myślę że to dość istotna
    > obsewacja.

    Rozumiem, że chodzi ci o możliwość definiowania w języku zapytań reguł
    typu "jeśli a jest wewnątrz b a b jest wewnątrz c, to a jest rónież
    wewnątrz c?

    > Danych jest *bardzo* dużo, powiedzmy ze zajmuja solidne gigabajty w
    > pamięci. Jednak relacji nie ma za wiele,

    Co rozumiesz przez "relację"? Chodzi o to, że rodzajów powiązań między
    danymi jest niewiele?

    Generalnie nie znam się zbyt dobrze, ale z wykorzystaniem Prologa do
    przeczesywania dużej ilości danych może być problem.

    Ja bym rozważył możliwość zembedowania jakiegoś języka skryptowego,
    który ci będzie łatwo zintegrować (np. ten twój JavaScript czy Python) i
    wystawienia mu API. W dowolnym języku Turing complete możesz wtedy
    napisać dowolne zapytania (nawet jeśli ich wyrażenie nie będzie zbyt
    eleganckie). W miarę identyfikacji typowych wzorców zapytań możesz
    zrefaktoryzować swoje zapytania w bibliotekę/framework i efektywnie
    stworzyć DSL-a osadzonego w wybranym języku.

    > Problem już został wstepnie rozwiązany w C++ i tam mam najbardziej
    > rozbudowane "zapytania" eksperymentalne. Niestety wygląd kodu ukrywa
    > intencje (więcej emulacji logiki niż sensu zapytania).

    C++, zwłaszcza C++11 jest dość ekspresywny, powinieneś móc zdefiniować
    infrastrukturę tak, żeby "emulację logiki" poukrywać w klasach,
    funkcjach, ostatecznie makrach - przy odpowiedniej bibliotece powinieneś
    mieć czytelny sens zapytania z dodatkowym bonusem w postaci type safety.

    Oczywiście nadal pozostaje ci problem taki, że jak masz mieć język
    zapytań w C++ to musisz w swoją aplikację wbudować kompilator (albo
    kazać użytkownikowi kompilować te zapytania samodzielnie), plus gdybyś
    chciał je uruchamiać po stronie serwera to zabezpieczenie aplikacji jest
    znacznie trudniejsze - tak więc C++ niekoniecznie jest dobrym pomysłem
    tak czy inaczej.

    > Chcę zrobić
    > eksperyment z językiem zorientowanym logicznie aby sprawdzić czy będzie
    > bardziej czytelny. Nie jestem tez zadowolony z mojej "bazy danych" i mam
    > przeczucie że zmiene jej organizacji może coś pomóc. Tu muszę szeroko
    > poczytać o innych organizacjach baz danych.

    Może wrzuć w relacyjną?


  • 50. Data: 2014-05-29 01:36:21
    Temat: Re: Prolog i hierarchiczna baza faktów
    Od: A.L. <a...@a...com>

    On Wed, 28 May 2014 20:35:23 +0200, Sebastian Bia?y
    <h...@p...onet.pl> wrote:

    >On 2014-05-27 23:52, Edek wrote:
    >> Nie ty pierwszy - poczytaj zanim się zabierzesz do tematu.
    >> Oprogramowanie potrafiące "przeczytać" książkę w miarę techniczną
    >
    >Nie analizuje języka naturalnego.
    >
    >> Hierarchiczną? Czy punkt a jest b czy b nad a i dlaczego?
    >
    >Ponieważ niezygle czesto wystepują tam zalezności "coś jest wewnątrz
    >czegoś". Z programowania to oznacza częste relacje parent<->child
    >wyrażone z relacji między obiektami w pamięci. Myślę że to dość istotna
    >obsewacja.

    Moze cie natchnie co prolog moze. To kalsyczny przykald bazy wiedzy, a
    pytanie brzmi: kto jest wlascicielem zebry?


    1. The Englishman lives in the red house.
    2. The Spaniard owns the dog.
    3. Coffee is drunk in the green house.
    4. The Ukrainian drinks tea.
    5. The green house is immediately to the right of the ivory house.
    6. The Porsche driver owns snails.
    7. The Masserati is driven by the man who lives in the yellow house.
    8. Milk is drunk in the middle house.
    9. The Norwegian lives in the first house on the left.
    10. The man who drives a Saab lives in the house next to the man
    with the fox.
    11. The Masserati is driven by the man in the house next to the
    house where the horse is kept.
    12. The Honda driver drinks orange juice.
    13. The Japanese drives a Jaguar.
    14. The Norwegian lives next to the blue house.

    To, jak mie sie wydaje, troche podobne do teojej bazy faktow. A to
    ejst program w Prologu. Uzywa prologu zwanego SICStus

    Daje taka odpowiedz:

    Q: zebra(S).
    A: S = [[yellow,norwegian,masserati,water,fox],
    [blue,ukranian,saab,tea,horse],
    [red,english,porsche,milk,snails],
    [ivory,spanish,honda,orange,dog],
    [green,japanese,jaguar,coffee,zebra]].

    Mzoe jednak warto sprobowac z Prologiem?...

    A tu caly program

    /*
    zebra.pl: Based on the classic zebra puzzle
    (C) Pieter Valcke, 2003-2004
    (C) Tom.Schrijvers at cs.kuleuven.be, 2003-2004
    This program is distributed under the terms of the GNU General Public
    License:
    http://www.gnu.org/licenses/gpl.html

    %% DESCRIPTION
    Solves the classic "zebra puzzle" a.k.a. "Einstein's Riddle"
    (cf. http://en.wikipedia.org/wiki/Zebra_Puzzle):
    1. The Englishman lives in the red house.
    2. The Spaniard owns the dog.
    3. Coffee is drunk in the green house.
    4. The Ukrainian drinks tea.
    5. The green house is immediately to the right of the ivory house.
    6. The Porsche driver owns snails.
    7. The Masserati is driven by the man who lives in the yellow house.
    8. Milk is drunk in the middle house.
    9. The Norwegian lives in the first house on the left.
    10. The man who drives a Saab lives in the house next to the man
    with the fox.
    11. The Masserati is driven by the man in the house next to the
    house where the horse is kept.
    12. The Honda driver drinks orange juice.
    13. The Japanese drives a Jaguar.
    14. The Norwegian lives next to the blue house.

    %% HOW TO USE
    zebra(S) returns the solution in a 5x5-matrix, one row for each
    person:
    S = [ [HouseColor1, Nationality1, Car1, Drink1, Pet1],
    [ ... ], ... ]

    %% SAMPLE QUERIES
    Q: zebra(S).
    A: S = [[yellow,norwegian,masserati,water,fox],
    [blue,ukranian,saab,tea,horse],
    [red,english,porsche,milk,snails],
    [ivory,spanish,honda,orange,dog],
    [green,japanese,jaguar,coffee,zebra]].
    */

    :- module(zebra,[zebra/1]).
    :- use_module(library(chr)).
    :- use_module(library(lists)).

    %% Deprecated syntax used for SICStus 3.x
    %handler zebra.
    %constraints domain/2, diff/2.

    %% Syntax for SWI / SICStus 4.x
    :- chr_constraint domain/2, diff/2.


    domain(_,[]) <=> fail.
    domain(X,[V]) <=> X = V.
    domain(X,L) <=> nonvar(X) | member(X,L).

    diff(X,Y) <=> nonvar(X), nonvar(Y) | X \== Y.
    diff(Y,X) \ domain(X,L) <=> nonvar(Y), select(Y,L,NL) | domain(X,NL).
    diff(X,Y) \ domain(X,L) <=> nonvar(Y), select(Y,L,NL) | domain(X,NL).

    % all_different(L,E) enforces that each element of L is different to E
    all_different([],_).
    all_different([H|T],E) :-
    diff(H,E),
    all_different(T,E).

    % make_domain(L,D) enforces for each element E of L:
    % E is from domain D and different to each other element from L
    make_domain([],_).
    make_domain([X|L],D) :- all_different(L,X), domain(X,D),
    make_domain(L,D).

    % left_right(L, R, X) is true when L is to the immediate left of R in
    list X
    left_right(L, R, List) :- append(_, [L,R|_], List).

    % next_to(X, Y, L) is true when X and Y are next to each other in list
    L
    next_to(X, Y, L) :- left_right(X, Y, L).
    next_to(X, Y, L) :- left_right(Y, X, L).

    % solves the zebra puzzle and returns solution in S
    zebra(S) :-
    [ [ ACo, AN, ACa, AD, AP ],
    [ BCo, BN, BCa, BD, BP ],
    [ CCo, CN, CCa, CD, CP ],
    [ DCo, DN, DCa, DD, DP ],
    [ ECo, EN, ECa, ED, EP ] ] = S,
    make_domain([ACo,BCo,CCo,DCo,ECo], [red,green,ivory,yellow,blue]),
    make_domain([AN, BN, CN, DN, EN ],
    [english,spanish,ukranian,norwegian,japanese]),
    make_domain([ACa,BCa,CCa,DCa,ECa],
    [porsche,masserati,saab,honda,jaguar]),
    make_domain([AD, BD, CD, DD, ED ],
    [coffee,tea,milk,orange,water]),
    make_domain([AP, BP, CP, DP, EP ], [dog,snails,fox,horse,zebra]),
    [_,_,[_,_,_,milk,_],_,_] = S, % clue 8
    [[_,norwegian,_,_,_],_,_,_,_] = S, % clue 9
    member( [green,_,_,coffee,_], S), % clue 3
    member( [red,english,_,_,_], S), % clue 1
    member( [_,ukranian,_,tea,_], S), % clue 4
    member( [yellow,_,masserati,_,_], S), % clue 7
    member( [_,_,honda,orange,_], S), % clue 12
    member( [_,japanese,jaguar,_,_], S), % clue 13
    member( [_,spanish,_,_,dog], S), % clue 2
    member( [_,_,porsche,_,snails], S), % clue 6
    left_right( [ivory,_,_,_,_], [green,_,_,_,_], S), % clue 5
    next_to( [_,norwegian,_,_,_],[blue,_,_,_,_], S), % clue 14
    next_to( [_,_,masserati,_,_],[_,_,_,_,horse], S), % clue 11
    next_to( [_,_,saab,_,_], [_,_,_,_,fox], S). % clue 10

strony : 1 ... 4 . [ 5 ] . 6


Szukaj w grupach

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: