eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programming › poprawność algorytmu
Ilość wypowiedzi w tym wątku: 94

  • 61. Data: 2015-03-31 14:48:32
    Temat: Re: poprawność algorytmu
    Od: "M.M." <m...@g...com>

    On Tuesday, March 31, 2015 at 12:20:29 PM UTC+2, g...@g...com wrote:
    > W dniu sobota, 28 marca 2015 10:54:16 UTC+1 użytkownik M.M. napisał:
    > > > >
    > > > > Mój (hipotetyczny) klient zamawia najlepszy program do gry w
    > > > > szachy o łącznym rozmiarze kodu i danych nie większym niż 1MB. Napisałem
    > > > > taki program. Jak mam przeprowadzić dowód, że nie istnieje w
    > > > > ramach tego rozmiaru lepszy program?
    > > >
    > > > To akurat nie jest problem metody dowodowej,
    > > Właśnie, tego nie da się udowodnić, a jest to też ważny aspekt
    > > programu. A w testach tak się robi, porównuje się kilka
    > > różnych algorytmów dla różnych danych.
    >
    > To, że "nie istnieje w ramach określonego rozmiaru >>lepszy<< program"
    > jest "ważnym aspektem programu"? Dla kogo jest to ważne?
    Uprościłem pewien aspekt złożoności do 'rozmiaru' - miałem bardzo
    podobną sytuację w praktyce. Ale ok, nie ciągnijmy.

    > Klienta interesuje, żeby program działał zadowalająco dobrze, a nie to, żeby
    > "w ramach określonego rozmiaru programu nie istniał jakiś lepszy".
    Nie zgodzę się, klient może chcieć aby program działał jak najlepiej
    to możliwe - w ramach jakiś ograniczeń.

    > (W każdym razie ja nie spotkałem nigdy klienta o tak osobliwych
    > zainteresowaniach. Ale nawet gdybym spotkał, pewnie po prostu nie
    > uwierzyłbym własnym uszom)
    Dlaczego byś nie uwierzył? Program wspomaga decyzje. Od decyzji zależy
    (w jakimś stopniu) generowanie zysków. Co w tym dziwnego, że chcemy
    aby taki program działał jak najlepiej.

    Inny przykład, program do translacji języków naturalnych. Dlaczego
    chciałbyś używać gorszy program niż lepszy?

    Następny problem: gra w szachy. Dlaczego używać słabszego programu niż
    silniejszego? Można mnożyć...

    > Nie widzę też, w jaki sposób testy miałyby tu być pomocne.
    Bierzesz wiele danych wejściowych, porównujesz jakość odpowiedzi i
    oceniasz. A jak na podstawie kodu udowodnić, że jeden program lepiej
    translatuje, albo lepiej gra w szachy, od drugiego?

    >
    > > > tylko nieprecyzyjnej
    > > > specyfikacji. Co to znaczy,że "w ramach określonego rozmiaru program
    > > > jest lepszy od innego programu"?
    > > Zakładamy że specyfikacja jest dobra. To jest kwestia jakości
    > > użytych algorytmów/heurystyk.
    >
    > To, co piszesz, nic nie wyjaśnia.
    > Powiedzenie, że coś jest najlepsze, jest po prostu powiedzeniem
    > nieprecyzyjnym.
    Wiadomo że jest nieprecyzyjnym. W każdym przypadku co innego
    oznacza najlepszy. W każdym przypadku chodzi o inną jakość algorytmów czy
    heurystyk. Obojętnie o jaką jakość chodzi, to trudno dowieść jej
    formalnie na podstawie kodu.

    > Co to znaczy "najlepsze"? Że przynosi najwięcej
    > pieniędzy? Że ma najwięcej użytkowników? Że najbardziej podoba
    > się klientowi?
    Tak, dobre przykłady.

    > Jeżeli podajesz jawnie złą specyfikację, to potem nie możesz mówić
    > "zakładamy, że specyfikacja jest dobra", bo nie jest.
    Można tak mówić, ponieważ to generalne określenie w każdym przypadku
    się konkretyzuje. Bez względu na to jak się skonkretyzuje, to ciężko
    dokonać takiego dowodu formalnego.



    >
    > > > Zresztą cechy użytkowe nie są czymś, co dowodzi się formalnie
    > > > (bo są subiektywne). Formalnie chcemy dowodzić raczej pewnych
    > > > inwariantów -- że na przykład w programie wielowątkowym nie dojdzie
    > > > do sytuacji dead-locku (klasyczne zastosowane logik temporalnych),
    > > Nie słyszałem o logice temporalnej. Może się mylę, ale to się
    > > wydaje łatwe. Dla mnie taki dowód sprowadza się do tego, aby
    > > wszystkie pary kodu, który może wykonać się równolegle, były
    > > opatrzone semaforami w tej samej kolejności w sensie wykonania i
    > > w odwrotnej kolejności (też w sensie wykonania).
    >
    > Mylisz się z pewnością, choćby dlatego, że semafor nie jest jedynym
    > mechanizmem synchronizującym używanym w programach wielowątkowych.
    Jeśli odebrałeś moje słowa dosłownie, to mam prośbę. Najpierw uogólnij
    sobie mój 'semafor' na inne mechanizmy synchronizowania, a potem
    przeanalizuj czy się mylę. Potem pogadamy dalej.


  • 62. Data: 2015-03-31 16:39:20
    Temat: Re: poprawność algorytmu
    Od: g...@g...com

    W dniu wtorek, 31 marca 2015 14:48:38 UTC+2 użytkownik M.M. napisał:
    > >
    > > To, że "nie istnieje w ramach określonego rozmiaru >>lepszy<< program"
    > > jest "ważnym aspektem programu"? Dla kogo jest to ważne?
    > Uprościłem pewien aspekt złożoności do 'rozmiaru' - miałem bardzo
    > podobną sytuację w praktyce. Ale ok, nie ciągnijmy.
    >
    > > Klienta interesuje, żeby program działał zadowalająco dobrze, a nie to, żeby
    > > "w ramach określonego rozmiaru programu nie istniał jakiś lepszy".
    > Nie zgodzę się, klient może chcieć aby program działał jak najlepiej
    > to możliwe - w ramach jakiś ograniczeń.

    "Najlepiej jak to możliwe" -- to też nieprecyzyjne określenie.
    Można je rozumieć jako "najlepiej jak komputer potrafi", albo
    "najlepiej jak programista potrafi". To ostatnie jest zresztą
    zazwyczaj twardym limitem, chyba że klient znajdzie lepszego
    programistę

    > > (W każdym razie ja nie spotkałem nigdy klienta o tak osobliwych
    > > zainteresowaniach. Ale nawet gdybym spotkał, pewnie po prostu nie
    > > uwierzyłbym własnym uszom)
    > Dlaczego byś nie uwierzył? Program wspomaga decyzje. Od decyzji zależy
    > (w jakimś stopniu) generowanie zysków. Co w tym dziwnego, że chcemy
    > aby taki program działał jak najlepiej.

    Powiedzieć, że coś "działa jak najlepiej", to coś innego, niż
    powiedzieć, że "nie istnieje w ramach pewnych ograniczeń lepszy program"
    (nie jest nawet jasne, co się tutaj rozumie w kwestii "istnienia programu"
    -- czy chodzi o jakiś program dostępny na rynku, czy taki, który
    ktoś potencjalnie mógłby napisać)

    > Inny przykład, program do translacji języków naturalnych. Dlaczego
    > chciałbyś używać gorszy program niż lepszy?

    Ja nie wiem, co to znaczy w tym kontekście "gorszy", a co "lepszy"

    > Następny problem: gra w szachy. Dlaczego używać słabszego programu niż
    > silniejszego? Można mnożyć...

    Zgaduję teraz, że pisząc o "program do gry w szachy" masz na myśli
    "program grający w szachy"? Jeśli tak, to ok -- rozumiem, co to znaczy
    "lepszy", a co "gorszy" (choć oczywiście jest to tylko częściowy
    porządek)

    > > Nie widzę też, w jaki sposób testy miałyby tu być pomocne.
    > Bierzesz wiele danych wejściowych, porównujesz jakość odpowiedzi i
    > oceniasz. A jak na podstawie kodu udowodnić, że jeden program lepiej
    > translatuje, albo lepiej gra w szachy, od drugiego?

    Oczywiście, kiedy masz już pewne kryterium jakości, to możesz się
    pokusić o przeprowadzenie formalnego dowodu w odniesieniu do tego
    kryterium

    > > To, co piszesz, nic nie wyjaśnia.
    > > Powiedzenie, że coś jest najlepsze, jest po prostu powiedzeniem
    > > nieprecyzyjnym.
    > Wiadomo że jest nieprecyzyjnym. W każdym przypadku co innego
    > oznacza najlepszy. W każdym przypadku chodzi o inną jakość algorytmów czy
    > heurystyk. Obojętnie o jaką jakość chodzi, to trudno dowieść jej
    > formalnie na podstawie kodu.

    Przeciwnie. Dla pewnych kryteriów przeprowadzenie formalnych dowodów
    będzie prostsze, dla innych trudniejsze, a dla jeszcze innych niemożliwe.

    > > Co to znaczy "najlepsze"? Że przynosi najwięcej
    > > pieniędzy? Że ma najwięcej użytkowników? Że najbardziej podoba
    > > się klientowi?
    > Tak, dobre przykłady.
    >
    > > Jeżeli podajesz jawnie złą specyfikację, to potem nie możesz mówić
    > > "zakładamy, że specyfikacja jest dobra", bo nie jest.
    > Można tak mówić, ponieważ to generalne określenie w każdym przypadku
    > się konkretyzuje. Bez względu na to jak się skonkretyzuje, to ciężko
    > dokonać takiego dowodu formalnego.

    Nieprawda. To, jak się coś skonkretyzuje (oraz co się skonkretyzuje),
    ma kluczowe znaczenie dla łatwości/trudności przeprowadzenia dowodu.

    > > > > Zresztą cechy użytkowe nie są czymś, co dowodzi się formalnie
    > > > > (bo są subiektywne). Formalnie chcemy dowodzić raczej pewnych
    > > > > inwariantów -- że na przykład w programie wielowątkowym nie dojdzie
    > > > > do sytuacji dead-locku (klasyczne zastosowane logik temporalnych),
    > > > Nie słyszałem o logice temporalnej. Może się mylę, ale to się
    > > > wydaje łatwe. Dla mnie taki dowód sprowadza się do tego, aby
    > > > wszystkie pary kodu, który może wykonać się równolegle, były
    > > > opatrzone semaforami w tej samej kolejności w sensie wykonania i
    > > > w odwrotnej kolejności (też w sensie wykonania).
    > >
    > > Mylisz się z pewnością, choćby dlatego, że semafor nie jest jedynym
    > > mechanizmem synchronizującym używanym w programach wielowątkowych.
    > Jeśli odebrałeś moje słowa dosłownie, to mam prośbę. Najpierw uogólnij
    > sobie mój 'semafor' na inne mechanizmy synchronizowania, a potem
    > przeanalizuj czy się mylę. Potem pogadamy dalej.

    Na przykład w API CUDA dla GPU nVidii masz polecenie __syncthreads(), które
    działa w taki sposób, że wszystkie wątki czekają, aż ostatni wątek wywoła
    owo polecenie. Deadlocka otrzymamy w każdym przypadku, gdy którykolwiek
    z wątków w danej jednostce uruchomieniowej nie wywoła polecenia __syncthreads().
    W jaki sposób przetłumaczyłbyś tę sytuację na swój "ogólniony semafor"?


  • 63. Data: 2015-03-31 19:08:21
    Temat: Re: poprawność algorytmu
    Od: "slawek" <h...@s...pl>

    Użytkownik "M.M." napisał w wiadomości grup
    dyskusyjnych:c8c46028-ecf9-454b-bb5d-75458b6ea66f@go
    oglegroups.com...

    >Inny przykład, program do translacji języków naturalnych. Dlaczego
    >chciałbyś używać gorszy program niż lepszy?

    Dlaczego uważasz, że dla w/w programów da się ustalić relację liniowego
    (pół)porządku?

    A praktycznie: program X zwykle daje ładniejszy tekst, ale za to przetwarza
    dane w chmurze, wysyłając je na serwer nie-wiadomo-gdzie. Program Y daje
    przyzwoitą jakość i przetwarza lokalnie. Który wybierzesz do przetłumaczenia
    tekstu przetargu? A który do przetłumaczenia tekstu na publicznie dostępną
    stronę WWW?

    >Następny problem: gra w szachy. Dlaczego używać słabszego programu niż
    >silniejszego? Można mnożyć...

    Bo np. silniejszy program zawsze wygrywa, więc nie ma fun-u?
    Można dzielić...

    >się konkretyzuje. Bez względu na to jak się skonkretyzuje, to ciężko
    >dokonać takiego dowodu formalnego.

    Problem, IMO, leży w czym innym: dowody formalne zapobiegają tylko niektórym
    błędom. A same z siebie mogą być błędne. Więc stwarzają złudną iluzję
    bezpieczeństwa.

    Ok. Zastąpmy "dowodzenie formalne" przez "pasy bezpieczeństwa". Oczywiście,
    pasy ratują życie itd. Ale /pomimo/ pasów zdarzają się śmiertelne wypadki.
    Więc np. jazda na podwójnym gazie, 200 km/h w terenie zabudowanym, w gęstej
    mgle i pod prąd nie jest bezpieczna nawet jeżeli PASY SĄ ZAPIĘTE. Podobnie
    pisanie super-odpowiedzialnych programów przez tylko jednego programistę,
    bez testów - NAWET Z UŻYCIEM FORMALNYCH DOWODÓW POPRAWNOŚCI - nie jest moim
    zdaniem dobrym pomysłem. I niekoniecznie dlatego że będą błędy.


  • 64. Data: 2015-03-31 19:29:18
    Temat: Re: poprawność algorytmu
    Od: "M.M." <m...@g...com>

    On Tuesday, March 31, 2015 at 4:39:21 PM UTC+2, g...@g...com wrote:
    > W dniu wtorek, 31 marca 2015 14:48:38 UTC+2 użytkownik M.M. napisał:
    > > >
    > > > To, że "nie istnieje w ramach określonego rozmiaru >>lepszy<< program"
    > > > jest "ważnym aspektem programu"? Dla kogo jest to ważne?
    > > Uprościłem pewien aspekt złożoności do 'rozmiaru' - miałem bardzo
    > > podobną sytuację w praktyce. Ale ok, nie ciągnijmy.
    > >
    > > > Klienta interesuje, żeby program działał zadowalająco dobrze, a nie to, żeby
    > > > "w ramach określonego rozmiaru programu nie istniał jakiś lepszy".
    > > Nie zgodzę się, klient może chcieć aby program działał jak najlepiej
    > > to możliwe - w ramach jakiś ograniczeń.
    >
    > "Najlepiej jak to możliwe" -- to też nieprecyzyjne określenie.
    > Można je rozumieć jako "najlepiej jak komputer potrafi", albo
    > "najlepiej jak programista potrafi". To ostatnie jest zresztą
    > zazwyczaj twardym limitem, chyba że klient znajdzie lepszego
    > programistę
    No oczywiście że jest nieprecyzyjne. Jest nieprecyzyjne jak każde
    generalizowanie.

    >
    > > > (W każdym razie ja nie spotkałem nigdy klienta o tak osobliwych
    > > > zainteresowaniach. Ale nawet gdybym spotkał, pewnie po prostu nie
    > > > uwierzyłbym własnym uszom)
    > > Dlaczego byś nie uwierzył? Program wspomaga decyzje. Od decyzji zależy
    > > (w jakimś stopniu) generowanie zysków. Co w tym dziwnego, że chcemy
    > > aby taki program działał jak najlepiej.
    >
    > Powiedzieć, że coś "działa jak najlepiej", to coś innego, niż
    > powiedzieć, że "nie istnieje w ramach pewnych ograniczeń lepszy program"
    > (nie jest nawet jasne, co się tutaj rozumie w kwestii "istnienia programu"
    > -- czy chodzi o jakiś program dostępny na rynku, czy taki, który
    > ktoś potencjalnie mógłby napisać)
    Przypuszczasz, że chodziło mi o dowód formalny (na podstawie kodu
    źródłowego) na istnienie lepszego programu na rynku? ;-)


    > > Inny przykład, program do translacji języków naturalnych. Dlaczego
    > > chciałbyś używać gorszy program niż lepszy?
    >
    > Ja nie wiem, co to znaczy w tym kontekście "gorszy", a co "lepszy"
    A ja wiem że wiesz, potrafisz odróżnić tekst dobrze przetłumaczony od
    źle przetłumaczonego.


    > > Następny problem: gra w szachy. Dlaczego używać słabszego programu niż
    > > silniejszego? Można mnożyć...
    >
    > Zgaduję teraz, że pisząc o "program do gry w szachy" masz na myśli
    > "program grający w szachy"? Jeśli tak, to ok -- rozumiem, co to znaczy
    > "lepszy", a co "gorszy" (choć oczywiście jest to tylko częściowy
    > porządek)

    >
    > > > Nie widzę też, w jaki sposób testy miałyby tu być pomocne.
    > > Bierzesz wiele danych wejściowych, porównujesz jakość odpowiedzi i
    > > oceniasz. A jak na podstawie kodu udowodnić, że jeden program lepiej
    > > translatuje, albo lepiej gra w szachy, od drugiego?
    >
    > Oczywiście, kiedy masz już pewne kryterium jakości, to możesz się
    > pokusić o przeprowadzenie formalnego dowodu w odniesieniu do tego
    > kryterium
    Nie wiem jak można udowodnić na podstawie źródeł dwóch
    programów, który program lepiej tłumaczy tekst.

    >
    > > > To, co piszesz, nic nie wyjaśnia.
    > > > Powiedzenie, że coś jest najlepsze, jest po prostu powiedzeniem
    > > > nieprecyzyjnym.
    > > Wiadomo że jest nieprecyzyjnym. W każdym przypadku co innego
    > > oznacza najlepszy. W każdym przypadku chodzi o inną jakość algorytmów czy
    > > heurystyk. Obojętnie o jaką jakość chodzi, to trudno dowieść jej
    > > formalnie na podstawie kodu.
    >
    > Przeciwnie. Dla pewnych kryteriów przeprowadzenie formalnych dowodów
    > będzie prostsze, dla innych trudniejsze, a dla jeszcze innych niemożliwe.
    Różnych programów o rozmiarze N bajtów mamy 256^N. Mamy definicję
    dopuszczalnych danych wejściowych, być może wraz z rozkładem
    prawdopodobieństwa. Mamy precyzyjnie określone co oznacza najlepszy.
    Jak udowodnić, że wśród 256^N nie istnieje żaden lepszy program
    od naszego?


    > > > Co to znaczy "najlepsze"? Że przynosi najwięcej
    > > > pieniędzy? Że ma najwięcej użytkowników? Że najbardziej podoba
    > > > się klientowi?
    > > Tak, dobre przykłady.
    > >
    > > > Jeżeli podajesz jawnie złą specyfikację, to potem nie możesz mówić
    > > > "zakładamy, że specyfikacja jest dobra", bo nie jest.
    > > Można tak mówić, ponieważ to generalne określenie w każdym przypadku
    > > się konkretyzuje. Bez względu na to jak się skonkretyzuje, to ciężko
    > > dokonać takiego dowodu formalnego.
    >
    > Nieprawda. To, jak się coś skonkretyzuje (oraz co się skonkretyzuje),
    > ma kluczowe znaczenie dla łatwości/trudności przeprowadzenia dowodu.
    Może czegoś nie wiem, dla jakich kryteriów dowód będzie łatwy w
    przeprowadzeniu?


    > > > > > Zresztą cechy użytkowe nie są czymś, co dowodzi się formalnie
    > > > > > (bo są subiektywne). Formalnie chcemy dowodzić raczej pewnych
    > > > > > inwariantów -- że na przykład w programie wielowątkowym nie dojdzie
    > > > > > do sytuacji dead-locku (klasyczne zastosowane logik temporalnych),
    > > > > Nie słyszałem o logice temporalnej. Może się mylę, ale to się
    > > > > wydaje łatwe. Dla mnie taki dowód sprowadza się do tego, aby
    > > > > wszystkie pary kodu, który może wykonać się równolegle, były
    > > > > opatrzone semaforami w tej samej kolejności w sensie wykonania i
    > > > > w odwrotnej kolejności (też w sensie wykonania).
    > > >
    > > > Mylisz się z pewnością, choćby dlatego, że semafor nie jest jedynym
    > > > mechanizmem synchronizującym używanym w programach wielowątkowych.
    > > Jeśli odebrałeś moje słowa dosłownie, to mam prośbę. Najpierw uogólnij
    > > sobie mój 'semafor' na inne mechanizmy synchronizowania, a potem
    > > przeanalizuj czy się mylę. Potem pogadamy dalej.
    >
    > Na przykład w API CUDA dla GPU nVidii masz polecenie __syncthreads(), które
    > działa w taki sposób, że wszystkie wątki czekają, aż ostatni wątek wywoła
    > owo polecenie. Deadlocka otrzymamy w każdym przypadku, gdy którykolwiek
    > z wątków w danej jednostce uruchomieniowej nie wywoła polecenia __syncthreads().
    Nigdy nie używałem tego polecenia. Czy jest konieczne używanie?
    Co ono usprawnia? Nigdy nie pisałem tak programu, aby jeden
    wątek (dosłownie) czekał na inny wątek. W moich programach wątki
    czekają aż wejście do pewnych instrukcji będzie dozwolone. Nigdy nie
    wiem czy one czekają aż ostatni dojdzie do bariery, czy wejdzie
    najpierw trzeci, czy najpierw pierwszy. Zawsze chcę aby weszły
    do instrukcji jak najszybciej z powodu wydajności, nie wiem dlaczego
    mam czekać na ostatni.


    > W jaki sposób przetłumaczyłbyś tę sytuację na swój "ogólniony semafor"?
    Nie wiem, w taki sposób nie programowalem nigdy. Na pewno wszystkie
    wątki muszą dojść do tej instrukcji. A żeby doszły, to nie mogą się
    wcześniej zablokować i syncthreads musi być wspólną instrukcją....

    Chyba mam sposób. Jeśli używam N semaforów s1, s2, ... sN, to zakładam, że
    każde synthreads jest objęte:
    s1
    s2
    sn
    syncthreds
    sn
    s2
    s1
    Potem używam wszędzie w tej samej kolejności od s1 do sn.

    Pozdrawiam


  • 65. Data: 2015-03-31 19:43:07
    Temat: Re: poprawność algorytmu
    Od: "M.M." <m...@g...com>

    On Tuesday, March 31, 2015 at 7:08:24 PM UTC+2, slawek wrote:
    > Użytkownik "M.M." napisał w wiadomości grup
    > dyskusyjnych:
    >
    > >Inny przykład, program do translacji języków naturalnych. Dlaczego
    > >chciałbyś używać gorszy program niż lepszy?
    >
    > Dlaczego uważasz, że dla w/w programów da się ustalić relację liniowego
    > (pół)porządku?
    Da się. Bierzemy N programów, M tekstów, K ludzi. Każda osoba czyta
    przetłumaczony tekst i wystawia ocenę od zera do np 10. Sumujemy
    punkty. Więc w ogóle można porównywać program do tłumaczenia, a na
    podstawie kodu nie można.


    > A praktycznie: program X zwykle daje ładniejszy tekst, ale za to przetwarza
    > dane w chmurze, wysyłając je na serwer nie-wiadomo-gdzie. Program Y daje
    > przyzwoitą jakość i przetwarza lokalnie. Który wybierzesz do przetłumaczenia
    > tekstu przetargu? A który do przetłumaczenia tekstu na publicznie dostępną
    > stronę WWW?
    >
    > >Następny problem: gra w szachy. Dlaczego używać słabszego programu niż
    > >silniejszego? Można mnożyć...
    >
    > Bo np. silniejszy program zawsze wygrywa, więc nie ma fun-u?
    > Można dzielić...
    Jak już odbiegamy, to też nie zawsze. Weźmiemy np. 20 programów i
    zrobimy turniej każdy z każdym. Może się okazać, że zwycięzca
    turnieju przegrywa z przegranym - ale to tylko na marginesie.

    >
    > >się konkretyzuje. Bez względu na to jak się skonkretyzuje, to ciężko
    > >dokonać takiego dowodu formalnego.
    >
    > Problem, IMO, leży w czym innym: dowody formalne zapobiegają tylko niektórym
    > błędom. A same z siebie mogą być błędne. Więc stwarzają złudną iluzję
    > bezpieczeństwa.
    >
    > Ok. Zastąpmy "dowodzenie formalne" przez "pasy bezpieczeństwa". Oczywiście,
    > pasy ratują życie itd. Ale /pomimo/ pasów zdarzają się śmiertelne wypadki.
    > Więc np. jazda na podwójnym gazie, 200 km/h w terenie zabudowanym, w gęstej
    > mgle i pod prąd nie jest bezpieczna nawet jeżeli PASY SĄ ZAPIĘTE. Podobnie
    > pisanie super-odpowiedzialnych programów przez tylko jednego programistę,
    > bez testów - NAWET Z UŻYCIEM FORMALNYCH DOWODÓW POPRAWNOŚCI - nie jest moim
    > zdaniem dobrym pomysłem. I niekoniecznie dlatego że będą błędy.
    Soft do sterowania rakietami podobno
    pisało osiem niezależnych zespołów. Wszystkie osiem wersji softu
    działało równolegle. Wyjście tych wszystkich wersji trafiało do systemu
    głosowania. Nawet jeśli tylko 2 wersje dały dobrą odpowiedź, a
    pozostały złą ale różną od siebie, to system jako całość działał.


    Pozdrawiam


  • 66. Data: 2015-03-31 19:49:54
    Temat: Re: poprawność algorytmu
    Od: g...@g...com

    W dniu wtorek, 31 marca 2015 19:29:20 UTC+2 użytkownik M.M. napisał:
    > >
    > > "Najlepiej jak to możliwe" -- to też nieprecyzyjne określenie.
    > > Można je rozumieć jako "najlepiej jak komputer potrafi", albo
    > > "najlepiej jak programista potrafi". To ostatnie jest zresztą
    > > zazwyczaj twardym limitem, chyba że klient znajdzie lepszego
    > > programistę
    > No oczywiście że jest nieprecyzyjne. Jest nieprecyzyjne jak każde
    > generalizowanie.

    Generalizowanie to tyle, co uogólnianie, czyli przechodzenie
    od przypadku konkretniejszego do ogólniejszego. Stąd, że Twoje
    generalizowanie jest nieprecyzyjne, nie wynika, że każde generalizowanie
    jest nieprecyzyjne.
    Na przykład dodanie funkcji porównującej jako parametru
    dla funkcji "sort" jest generalizowaniem, a jest piekielnie
    precyzyjne.

    > > Powiedzieć, że coś "działa jak najlepiej", to coś innego, niż
    > > powiedzieć, że "nie istnieje w ramach pewnych ograniczeń lepszy program"
    > > (nie jest nawet jasne, co się tutaj rozumie w kwestii "istnienia programu"
    > > -- czy chodzi o jakiś program dostępny na rynku, czy taki, który
    > > ktoś potencjalnie mógłby napisać)
    > Przypuszczasz, że chodziło mi o dowód formalny (na podstawie kodu
    > źródłowego) na istnienie lepszego programu na rynku? ;-)

    Problem polega na tym, że nie wiem, o co Ci chodziło, bo wyraziłeś
    się dość nieprecyzyjnie

    > > > Inny przykład, program do translacji języków naturalnych. Dlaczego
    > > > chciałbyś używać gorszy program niż lepszy?
    > >
    > > Ja nie wiem, co to znaczy w tym kontekście "gorszy", a co "lepszy"
    > A ja wiem że wiesz, potrafisz odróżnić tekst dobrze przetłumaczony od
    > źle przetłumaczonego.

    W pewnym zakresie może tak. Ale znajdzie się również taki, w którym
    eksperci będą między sobą dywagować, czy Słomczyński, czy Barańczak

    > > Oczywiście, kiedy masz już pewne kryterium jakości, to możesz się
    > > pokusić o przeprowadzenie formalnego dowodu w odniesieniu do tego
    > > kryterium
    > Nie wiem jak można udowodnić na podstawie źródeł dwóch
    > programów, który program lepiej tłumaczy tekst.

    Też nie wiem. Prawdopodobnie nie można, tym bardziej, że
    nie umiemy nawet uściślić, co to znaczy "lepiej tłumaczyć tekst"

    > > Przeciwnie. Dla pewnych kryteriów przeprowadzenie formalnych dowodów
    > > będzie prostsze, dla innych trudniejsze, a dla jeszcze innych niemożliwe.
    > Różnych programów o rozmiarze N bajtów mamy 256^N. Mamy definicję
    > dopuszczalnych danych wejściowych, być może wraz z rozkładem
    > prawdopodobieństwa. Mamy precyzyjnie określone co oznacza najlepszy.
    > Jak udowodnić, że wśród 256^N nie istnieje żaden lepszy program
    > od naszego?

    W niektórych przypadkach możemy być może policzyć, jaka jest teoretyczna
    granica wydajności, i pokazać, że nasz algorytm ją realizuje (jeżeli
    poprze "lepszość" rozumiemy mniejszą złożoność obliczeniową)

    Ale niestety Twoje użycie słowa "najlepszy" jest nieprecyzyjne,
    bo "najlepszy" może być również w sensie "maintainability" -- że
    ma najlepsze komentarze, jest najłatwiej rozszerzalny itd.

    > > Nieprawda. To, jak się coś skonkretyzuje (oraz co się skonkretyzuje),
    > > ma kluczowe znaczenie dla łatwości/trudności przeprowadzenia dowodu.
    > Może czegoś nie wiem, dla jakich kryteriów dowód będzie łatwy w
    > przeprowadzeniu?

    Nie rozumiem o co pytasz. W ogólności zależy to od przypadku.

    > > > > Mylisz się z pewnością, choćby dlatego, że semafor nie jest jedynym
    > > > > mechanizmem synchronizującym używanym w programach wielowątkowych.
    > > > Jeśli odebrałeś moje słowa dosłownie, to mam prośbę. Najpierw uogólnij
    > > > sobie mój 'semafor' na inne mechanizmy synchronizowania, a potem
    > > > przeanalizuj czy się mylę. Potem pogadamy dalej.
    > >
    > > Na przykład w API CUDA dla GPU nVidii masz polecenie __syncthreads(), które
    > > działa w taki sposób, że wszystkie wątki czekają, aż ostatni wątek wywoła
    > > owo polecenie. Deadlocka otrzymamy w każdym przypadku, gdy którykolwiek
    > > z wątków w danej jednostce uruchomieniowej nie wywoła polecenia __syncthreads().
    > Nigdy nie używałem tego polecenia. Czy jest konieczne używanie?
    > Co ono usprawnia?

    Umożliwia synchronizację wątków przed dostępem do pamięci.
    Jeśli Cię to bardziej interesuje, polecam kurs z "Heterogenous Parallel
    Programming" na Courserze albo książkę "CUDA w przykładach" (wyd. Helion)

    > > W jaki sposób przetłumaczyłbyś tę sytuację na swój "ogólniony semafor"?
    > Nie wiem, w taki sposób nie programowalem nigdy. Na pewno wszystkie
    > wątki muszą dojść do tej instrukcji. A żeby doszły, to nie mogą się
    > wcześniej zablokować i syncthreads musi być wspólną instrukcją....
    >
    > Chyba mam sposób. Jeśli używam N semaforów s1, s2, ... sN, to zakładam, że
    > każde synthreads jest objęte:
    > s1
    > s2
    > sn
    > syncthreds
    > sn
    > s2
    > s1
    > Potem używam wszędzie w tej samej kolejności od s1 do sn.

    Nie. Każdy wątek może bezpiecznie wywołać __syncthreads i nie ma potrzeby
    zabezpieczania jej semaforami, zaś (pomijając kwestię marnowania zasobów)
    właśnie z tego względu zabezpieczanie semaforami nic w tym przypadku nie
    da, a tym bardziej nie ochroni przed deadlockiem.


  • 67. Data: 2015-03-31 19:59:49
    Temat: Re: poprawność algorytmu
    Od: "slawek" <h...@s...pl>

    Użytkownik napisał w wiadomości grup
    dyskusyjnych:fec16715-19e6-4b77-b1e4-ce87326de28b@go
    oglegroups.com...

    >Z ciekawości zapytam: jakie masz doświadczenie z formalnym dowodzeniem
    >twierdzeń?

    Z ciekawości zapytam: czy udało się zrobić system klasy A według Orange Book
    DoD?

    Tu masz link http://csrc.nist.gov/publications/history/dod85.pdf, jakbyś nie
    pamiętał o co chodzi, a pamiętasz, prawda?



  • 68. Data: 2015-03-31 20:10:06
    Temat: Re: poprawność algorytmu
    Od: "slawek" <h...@s...pl>

    Użytkownik "M.M." napisał w wiadomości grup
    dyskusyjnych:47d74d19-db68-4988-893e-d37e1e996365@go
    oglegroups.com...

    >Soft do sterowania rakietami podobno
    >pisało osiem niezależnych zespołów. Wszystkie osiem wersji softu
    >działało równolegle. Wyjście tych wszystkich wersji trafiało do systemu
    >głosowania. Nawet jeśli tylko 2 wersje dały dobrą odpowiedź, a
    >pozostały złą ale różną od siebie, to system jako całość działał.

    I co zrobisz, jeżeli 1 i 2 dają odpowiedź A, 3 i 4 dają B, a 5 po prostu się
    sfajczył?


  • 69. Data: 2015-03-31 20:34:14
    Temat: Re: poprawność algorytmu
    Od: g...@g...com

    W dniu wtorek, 31 marca 2015 20:00:08 UTC+2 użytkownik slawek napisał:
    > Użytkownik napisał w wiadomości grup
    > dyskusyjnych:fec16715-19e6-4b77-b1e4-ce87326de28b@go
    oglegroups.com...
    >
    > >Z ciekawości zapytam: jakie masz doświadczenie z formalnym dowodzeniem
    > >twierdzeń?
    >
    > Z ciekawości zapytam: czy udało się zrobić system klasy A według Orange Book
    > DoD?

    Unikanie odpowiedzi na pytanie poprzez zadawanie innego pytania
    nie robi na mnie wrażenia. Jeżeli zrobiłeś coś, z czego jesteś
    dumny i chcesz się pochwalić, to myślę, że wszyscy chętnie posłuchamy.

    Jeżeli idzie o mnie, to nie, nie próbowałem nawet nigdy zrobić systemu
    klasy A według Orange Book DoD.


  • 70. Data: 2015-03-31 21:01:41
    Temat: Re: poprawność algorytmu
    Od: "M.M." <m...@g...com>

    On Tuesday, March 31, 2015 at 8:10:47 PM UTC+2, slawek wrote:
    > Użytkownik "M.M." napisał w wiadomości grup
    > dyskusyjnych:47d74d19-db68-4988-893e-d37e1e996365@go
    oglegroups.com...
    >
    > >Soft do sterowania rakietami podobno
    > >pisało osiem niezależnych zespołów. Wszystkie osiem wersji softu
    > >działało równolegle. Wyjście tych wszystkich wersji trafiało do systemu
    > >głosowania. Nawet jeśli tylko 2 wersje dały dobrą odpowiedź, a
    > >pozostały złą ale różną od siebie, to system jako całość działał.
    >
    > I co zrobisz, jeżeli 1 i 2 dają odpowiedź A, 3 i 4 dają B, a 5 po prostu się
    > sfajczył?
    TO nie przejdzie :) Napisałem o ciut bardziej korzystnej
    sytuacji: "złą ale różną".

strony : 1 ... 6 . [ 7 ] . 8 ... 10


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: