Forum Coders' city Strona Główna Coders' city
Nasza pasja to programowanie!
 

 PomocPomoc   SzukajSzukaj   UżytkownicyUżytkownicy   GrupyGrupy  RejestracjaRejestracja 
Archiwum starego forum + teoria    RSS & Panel/SideBar
 ProfilProfil   Zaloguj się, by sprawdzić wiadomościZaloguj się, by sprawdzić wiadomości   ZalogujZaloguj 

Potrzebuję szybkiej odpowiedzi na moje pytanie... Zasady

kubit stochastyczny... co Wy na to ??

Idź do strony Poprzedni  1, 2, 3, 4  Następny

 
Odpowiedz do tematu    Forum Coders' city Strona Główna -> Algorytmy + inżynieria oprogramowania
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
hurgadion



Dołączył: 06 Kwi 2011
Posty: 853
Skąd: Web :)

PostWysłany: Czw Kwi 19, 2018 10:29 am  OP    Temat postu: Odpowiedz z cytatem Pisownia

kolejny odcinek... ciut specjalistyczny...

W mechanice statystycznej ważne są metody umożliwiające symulowanie zachowania się np. cząstek elementarnych... Są to między innymi metoda Monte Carlo... oraz Łańcuchy Markowa... Okazuje się, ze dany Łańcuch Markowa można zamodelować jako n-wymiarowy kubit stochastyczny...

Teraz pytanie jest takie, czy dany układ kubitów (w ewentualnym praktycznym ujęciu) dałoby się zasymulować określonym łańcuchem Markowa ?? Jeżeli tak, to mielibyśmy dość spory aparat matematyczny umożliwiający sterowanie takim układem kubitów... głównie chodzi o gwarancję ewentualnej zbieżności jakiegoś procesu symulacji do określonego stanu równowagi... oczywiście z pewną dokładnością... być może trzebaby stworzyć jakieś inne metody sterujące tym zbiorem kubitów... nie wiem... za mało wiem na temat prawdziwej struktury komputera kwantowego oraz metod, które implementują i umożliwiają jego działanie...

Następna rzecz jest taka... Jeżeli dałoby się jakoś stworzyć (w praktyce) układ kubitów stochastycznych, tak aby rozwiązywały określony problem numeryczny wykorzystując możliwość równoległego obliczania tak jak w komputerze kwantowym, to mielibyśmy dość spory wzrost szybkości działania powyższych algorytmów w wersji kubitowej...

_________________
miasto nauki praktycznej
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Odwiedź stronę autora Numer GG
hurgadion



Dołączył: 06 Kwi 2011
Posty: 853
Skąd: Web :)

PostWysłany: Czw Kwi 19, 2018 6:23 pm  OP    Temat postu: Odpowiedz z cytatem Pisownia

a teraz chyba ważne spostrzeżenie... jak przejść od systemu kubitowego do standardowego liczenia ?? okazuje się, że jest to możliwe... niech A[n, n+1] oznacza kubit:
Kod:

a1 * |2^n> + a2 * |2^{n+1}>


Tak naprawdę możemy ten kubit traktować jak przedział, więc możemy stosować metody klasycznej arytmetyki przedziałowej, czyli np.:
Kod:

S[n, n+1] = A[n, n+1] + A[n+1, n+2]


Analogicznie:
Kod:

S[1:n+1] = A[1, 2] + A[2, 3] + ... +A[n+1, n+2]


Stąd otrzymujemy
Kod:

S[1:n+1] = a11 * |1> + a12 * |2>  + ... + an1 * |2^{n+1}> + an2 * |2^{n+2}>


Jeżeli teraz weźmiemy współczynniki:
Kod:

ai1 = 1, ai2 = 0 dla każdego i = 1, ... , n


to otrzymamy liczbę postaci:
Kod:

a11 * 1 + a21 * 2 + a31 * 2^2 + an1 * 2^{n+1}


Wniosek: za pomocą odpowiedniego ciągu zer i jedynek liczb ai1 można utworzyć dowolną liczbę całkowitą z przedziału [0, 2^{n+2}-1]
________________________________________________________________________________________________________

Dobra, to na razie chyba napisałem prawie tyle ile wiem... Jak mi coś przyjdzie do głowy to naskrobię...

_________________
miasto nauki praktycznej
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Odwiedź stronę autora Numer GG
hurgadion



Dołączył: 06 Kwi 2011
Posty: 853
Skąd: Web :)

PostWysłany: Pią Kwi 20, 2018 7:53 am  OP    Temat postu: Odpowiedz z cytatem Pisownia

i kolejny pomysł... na szybsze dodawanie liczb z danej listy... powinno działać sporo szybciej niż dodawanie po kolei... szczególnie na dużych liczbach... działa to na zasadzie, jakby to powiedzieć... redukcji potęgowej... a w słowniku zliczamy odpowiednie ilości potęg dwójki pojawiające się w obliczeniach... to tak w sporym skrócie... kod:
Kod:

import math

V ={}
for i in range(0, 1000):
    V[i]=0

def dodawanie(lista, V, mm):
    ## mm - lista przesuniec bitow w lewo
    s = 0
    if lista == []:
        return sum([V[i]*2**i for i in V.keys()])
    lista1 = []
    m1 = []
    for i in range(len(lista)):
        a = lista[i]
        if mm != []:
            s = mm[i]
        if a != 0:
            m = int(math.log(a, 2))
            w = a - 2**m
            if w != 0:
                lista1.append(w)
                m1.append(s)
          
            if V[m+s] == 1:
                V[m+s] = 0
                V[m+s+1] += 1
            else:
                V[m+s] = 1
    return dodawanie(lista1, V, m1)


No i w oparciu o to dodawanie liczb, z redukcją, można podać nowy (no chyba, że takie istnieją) sposób mnożenia liczb... oczywiście w kontekście cały czas mamy wykonywanie działań na kubitach:
Kod:

def mnozenie(a, b, V):
    left_bit = []
    while a !=0:
        x = int(math.log(a, 2))
        left_bit = left_bit + [x]
        a = a - 2**x
    return dodawanie([b for i in range(len(left_bit))], V, left_bit)


Uwaga. Mogę być błędy, ale na razie chcę przekazać idee jakie mi chodzą po głowie... ^^
_________________________________________________________________________________________________

_________________
miasto nauki praktycznej
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Odwiedź stronę autora Numer GG
hurgadion



Dołączył: 06 Kwi 2011
Posty: 853
Skąd: Web :)

PostWysłany: Pią Kwi 20, 2018 8:38 am  OP    Temat postu: Odpowiedz z cytatem Pisownia

i ostatnie rozważanie, na razie, aby nie zaśmiecać forum, napisałem większość tego co mi chodzi aktualnie po głowie, jeżeli chodzi o tę tematykę, jak dla mnie, ciekawą... jak wygląda ujęcie problemu plecakowego w wersji kubitu stochastycznego... na pewno w najprostszej wersji problemu plecakowego można dokonać redukcji potęgowej, czyli np…

jeżeli mamy listę liczb
Kod:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 21, 22, 23, 24, 25, 26, 27, 56, 89, 99]



i chcemy zapełnić plecak o pojemności 100, to przedstawiamy tę wartość go w postaci:
Kod:

2^6 + 36


a liczby z listy przedstawiamy w podobnej postaci:
Kod:

[1, 2, 2+1, 2^2, 2^2+1, 2^2+2, … 2^4 + 5, …. , 2^6 + 35]


Czyli mamy sprowadzenie problemu do wersji zbliżonej do kubitowej... "Jedyny" problem, czy takie kubity stochastyczne są realne i sensowne do praktycznych implementacji... i czy po implementacji byłaby możliwość otrzymania szybkości porównywalnej z klasycznym podejściem do Informatyki Kwantowej oraz wykorzystania jej metod implementacji odpowiednich objektów programistycznych... na razie tyle... ^^
____________________________________________________________________________________________________________________________________________________________________________________________________________

_________________
miasto nauki praktycznej
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Odwiedź stronę autora Numer GG
samolot



Dołączył: 26 Sty 2006
Posty: 8312
Skąd: Toruń

PostWysłany: Nie Kwi 22, 2018 11:02 am      Temat postu: Odpowiedz z cytatem Pisownia

Cytat:
kubit (uogólnienie bitu, może przyjmować wartości inne niż 0, 1),

Brak odpowiedzi ludzi na twoje rozważania może wynikać z tego, że jest to mało znany temat. Ja Twoich rozważań na temat wykorzystania cech kubitu do zagadnień przetwarzania danych nie rozumiem. Jest to dla mnie czarna magia.

Wybacz moje podstawowe, może lamerskie pytanie: jak się taki stan kubitu odczytuje ? Skoro może on przyjmować wartości pomiędzy umownym 0 a 1 to skąd wiadomo, że jakaś pośrednia wartość z tego przedziału ma być unana za 0 lub za 1. Co o tym decyduje?

_________________
Nie zadawaj bezcelowych pytań / Windows 8.1 / Windows 10 / VB2008 / VB 2010 / VB 2012 / Pisz poprawnie
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Wyślij email
hurgadion



Dołączył: 06 Kwi 2011
Posty: 853
Skąd: Web :)

PostWysłany: Nie Kwi 22, 2018 2:24 pm  OP    Temat postu: Odpowiedz z cytatem Pisownia

spokojnie... nic się nie dzieje... temat nie jest znany, ponieważ jak sądzę... może to być, hmmm... być może oryginalne... zaproponowałem tu wstępny zarys (bardzo robocza wersja) przemyśleń... które być może mogą być (nie muszą) pewną alernatywą dla procesora kwantowego... ale na razie nie mam pojęcia jak mogłoby to wyglądać w praktyce, co jest chyba zrozumiałe... ^^

ponieważ temat nie jest znany... ja sam mam wiele pytań oraz wątpliwości... oraz też sporo niewiedzy w temacie... dlatego stwierdziłem, że to tutaj umieszczę, aby wywołać dyskusję, więc dzięki samolot za zabranie głosu... bez wątpienia cenne by było spojrzenie na to osób zajmujących się praktyczną implementacją procesorów kwantowych... wydaje mi się, że wiele metod stamtąd możnaby wykorzystać w kubitowym ujęciu, ale może jestem w błędzie... wysłałem przemyślenia paru osobom, m. in. znanemu twórcy jednego z ważniejszych algorytmów w Informatyce Kwantowej... generalnie idea jest taka: spróbowanie znalezienia innego kodowania niż zero-jedynkowe... tak aby nie wykorzystywać struktur fizycznych w komputerze kwantowym tylko elementy stworzone w kubitowym ujęciu...

pytanie, które zadałeś jest chyba najważniejsze... jak to wszystko zakodować... czyli przełożyć na język maszynowy... właśnie zapisałem się na kurs "jak stworzyć komputer", może poduczę się podstaw kodowania... i liznę assemblera ciut...

Podam może przykład, liczbę np. 251 (przypadkowa) można zapisać tak:
1. zerojedynkowo:
Kod:

11111011


2. kubitowo:
Kod:

5/128*|2^7> + 123/128*|256>


Przy takim ujęciu pamiętamy pozycję kubitu oraz ułamek, wystarczy pierwszy...

3. potęgowo
Kod:

2^8+2^7+2^6+2^5+2^4+2^3+2^1+1



4. potęgowo ze znalezieniem najbliższego stanu (czyli potęgi dwójki)
Kod:

2^9-2^2-1


I uwaga, to nie to samo co kodowanie zerojedynkowe... bo jeżeli osiągnęlibyśmy możliwość obliczania równoleglego, tak jak w komputerach kwantowych, to dodawalibyśmy na kubitach (czyli stanach odpowiadających potęgom liczby 2) w tym samym czasie, pamiętając o przesunięciu o jeden w lewo jeżeli dodawanie będzie w tym samym kubicie...
_______________________________________________________________________________________________________

Przykład drugi, mamy liczbę:
Kod:

4820814132776970826625886277023487807566608981348378505904128



I możemy ją zapisać zerojedynkowo tak:
Kod:

1100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000


Natomiast w wersji kubitowej to będzie po prostu liczba:
Kod:

|2^200>+|2**201>


lub jakaś jej inna reprezentacja... pytanie jak to ugryźć... od strony praktycznej, to temat otwarty... :)
____________________________________________________________________________________________________________

odpowiadając na Twoje pytanie samolot: liczba kubitowa... może nie być ani zerem ani jedynką... może przyjmować wartość pośrednią... lub pewną reprezentację tej pośredniej wartości... ale można czasem powiedzieć, że wartość jest bardziej zerem niż jednynką... jeżeli liczba będzie miała np. reprezentację odpowiednią liczbie 0.123456789, no to gołym okiem widać, że jej bliżej do zera niż do jedynki... np w logice rozmytej tworzy się odpowiednie funkcje przynależności, aby to stwierdzić... ale nie zawsze w praktyce chyba trzeba mieć zero lub jedynkę...
____________________________________________________________________________________________________________

rozpisuję się, ale po to żeby było łatwiej wgryźć się w temat... ale ostrzegam: może być trudno, tym bardziej że to nietypowe... i standardowy zerojedynkowicz (jak każdy programista i informatyk, nie licząc tych kwantowych) myśli w standardowych kategoriach zera i jedynek... ^^ a ja jestem ciut zarażony mechaniką kwantową... stąd te moje "rozważania" stochastyczne... ^^

_________________
miasto nauki praktycznej
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Odwiedź stronę autora Numer GG
hurgadion



Dołączył: 06 Kwi 2011
Posty: 853
Skąd: Web :)

PostWysłany: Nie Kwi 22, 2018 3:32 pm  OP    Temat postu: Odpowiedz z cytatem Pisownia

a miałem nic nie pisać, no ale samolot pobudził moje neurony ciut do myślenia, więc kolejny odcinek...

Rozważania prowadziłem dla kubitu postaci:
Kod:

a1*|1> + a2*|2> + a3*|4> + … + an*|2^{n+1}>


analogicznie można rozważać układ kubitów dla liczb, np. 3, 5, 7, 11… być może wartoby je rozważać jednocześnie… dlaczego ?? gdyż mielibyśmy wtedy ciut lepszą prezentację liczby… czasem bardziej optymalną…

Przykład. Dla liczby
Kod:

6366805760909027985741435148989634


mamy jej reprezentację kubitową taką:
Kod:

2^112 + 1174508902374200357210938819769538


jak widać ten współczynnik drugi jest spory, i trzebaby go „ujarzmiać” dalej… natomiast przy większej możliwości kubitów (o podstawach 2, 3, 5, 7 tę samą liczbę można zapisać w postaci:
Kod:

7^40 + 5^10 + 2^3


I kodzik dla powyższej liczby (prosta wersja, wychwytuje najbardziej optymalny rozkład w takim ujęciu):
Kod:

import math

def oblicz(x):
   w = x
   while x !=0:    
        imin = 2
        for i in [2, 3, 5, 7, 11]:
            z = int(math.log(x, i))
            s = x-i**z
            if s < w:
                w = s
                imin = i
                zmin = z
        print(imin, zmin)
        x = w


Hmmm… Albo może w ogóle spróbować się zastanowić nad prezentacją liczb w postaci kubitowej takiej:
Kod:

a1*|1> + a2*|10> + a3*|100> + … + an*|10^{n+1}>


Wtedy dodawanie wykonywalibyśmy tak jak standardowo, ale w wersji kubitowej… Mnożenie chyba też… A dzielenie tak jak wyżej, takie kubitowe z wyszukiwaniem wyniku… To być może mogłoby uprościć wiele… :) Wtedy nietrzebaby nic konwertować tylko spamiętywać liczby z klawiatury (do Entera) i lokować w odpowiednich kubitach… ^^ wtedy liczba mogłaby być obiektem, który byłby zbiorem par (nr_kubitu, wartość)… Tylko jedno pytanie, podstawowe, czy to jest możliwe… ?????
_____________________________________________________________________________________________________

_________________
miasto nauki praktycznej
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Odwiedź stronę autora Numer GG
hurgadion



Dołączył: 06 Kwi 2011
Posty: 853
Skąd: Web :)

PostWysłany: Nie Kwi 22, 2018 6:32 pm  OP    Temat postu: Odpowiedz z cytatem Pisownia

i kolejny kawałek... dzięki samolot... ^^

Dodawanie w dziesiętnych kubitach (łatwo to zaimplementować na słowniku, który będzie symulował kubity, jako obiekty)… generalnie dodajemy kubit po kubicie (jak w szkole)… ale jeżeli zdefiniujemy podstawowe działania w słowniku z dostępem o złożoności O(1), to będzie to działać raczej szybko… przykładowy (roboczy) kod:
Kod:

import math

tplus = {}
for i in range(10):
    for j in range(10):
        if i+j < 10:
            s = 0
            x = i + j
        else:
            s = 1
            x = i + j -10
        tplus[(i, j)] = (x, s)

def dodaj(a, b):
    if b > a:
        a, b = b, a
    V={}
    W={}
    astr = str(a)[::-1]
    bstr = str(b)[::-1]
    for i in range(len(astr)):
        V[i] = int(astr[i])
    for i in range(len(bstr)):
        W[i] = int(bstr[i])
    
    sss = 0
    for i in range(len(W)):
        t, s = tplus[(V[i], W[i])]
        
        V[i] = t + sss
        sss = s
    z = len(W)
    while sss == 1:
        if not z in V.keys():
            V[z] = 1
            break
        t, s = tplus[(V[z], 1)]
      
        if sss == 1:
            V[z] = t
            z += 1
            sss = s
        else:
            break
    xxx = ""
    
    for i in range(len(V)):
        xxx = str(V[i]) + xxx
    return xxx

print(dodaj(9999, 123434563456)==str(9999+123434563456))


______________________________________________________________________________-

Druga sprawa, to mnożenie… To może być trudniejsze ciut.. Ale tutaj mógłby pracować nieźle algorytm Karatsuby… Po pierwsze jest szybszy od standardowego… Po drugie jest rekurencyjny… Więc być może dawałoby się obliczać fragmenty równolegle… I po trzecie także można zdefiniować słownik z tabliczką mnożenia… A po czwarte dodawać umiemy… Trzeba by „tylko” uogólnić powyższe dodawanie na n składników, aby robić wszystko za jednym zamachem…
______________________________________________________________________________

Na razie to tyle... ^^

_________________
miasto nauki praktycznej
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Odwiedź stronę autora Numer GG
hurgadion



Dołączył: 06 Kwi 2011
Posty: 853
Skąd: Web :)

PostWysłany: Pon Kwi 23, 2018 5:32 am  OP    Temat postu: Odpowiedz z cytatem Pisownia

jeszcze jedno... (wiem, strasznie pier$%^&)...

przy układzie kubitów (inne też możnaby rozważać lub implementować równolegle):
Kod:

a1*|1> + a2*|10> + a3*|100> +...


możnaby kodować standardowo liczby, czyli z każdym stanem takiego kubitu mielibyśmy związane stany 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 odpowiadające cyfrom w układzie dziesiętnym... i uwaga teraz pojadę ciut, może to lekka bzdura... a może nawet ciut większa... dla dodawania mielibyśmy bramkę, nazwijmy ją Plus Number Gate:
Kod:

A_n + B_{n+1}


gdzie A_n miałoby postać
Kod:

0 1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9 0
2 3 4 5 6 7 8 9 0 1
3 4 5 6 7 8 9 0 1 2
4 5 6 7 8 9 0 1 1 2
5 6 7 8 9 0 1 2 3 4
6 7 8 9 0 1 2 3 4 5
7 8 9 0 1 2 3 4 5 6
8 9 0 1 2 3 4 5 6 7
9 0 1 2 3 4 5 6 7 8  


natomiast B_{n+1} miałoby taką postać:
Kod:

0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 1
0 0 0 0 0 0 0 0 1 1
0 0 0 0 0 0 0 1 1 1
0 0 0 0 0 0 1 1 1 1
0 0 0 0 0 1 1 1 1 1
0 0 0 0 1 1 1 1 1 1
0 0 0 1 1 1 1 1 1 1
0 0 1 1 1 1 1 1 1 1
0 1 1 1 1 1 1 1 1 1  



HomeWork (nie tylko dla studentów): jak wyglądałaby bramka Multiplication Number Gate... ?? :)
_________________________________________________________________________________________________________

_________________
miasto nauki praktycznej
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Odwiedź stronę autora Numer GG
hurgadion



Dołączył: 06 Kwi 2011
Posty: 853
Skąd: Web :)

PostWysłany: Pon Kwi 23, 2018 3:27 pm  OP    Temat postu: Odpowiedz z cytatem Pisownia

no i kolejny odcinek... trochę odchodzę od głównego tematu, ale nie całkiem... jak widzicie podchodzę do zagadnienia kompleksowo, być może, jak na razie, ciut chaotycznie...

ciutkę z kompresji danych... przykład jest specjalnie wydumany... ale może wskazywać kierunek badań... to chyba ciekawy kierunek jak sądzę... wydaje mi się, że można kodować teksty jako liczby...

Spróbujmy zakodować tekst:
Kod:

DCHDDJAGAHIJGBEBIHAABDBIJGJGICHFJJBFCCBGGECAEGAEDAGEHIJEIDCJBDGIAJGBDDHJGEAEGHEFFEIIDCHAAJCDCFJAEBFHBFAIIGGIEBCHFGAAHBAAJCBHCFGFEFIIFDJDAFDDCIFCHFIJDHG"


szukamy jakiegoś kodowania, tu akurat jest jednocyfrowe, ale można dwucyfrowo... weźmy na przykład takie:
Kod:

V = {}
for i in range(10):
    V[chr(65 + i)] = i


Konwertujemy tekst:
Kod:

s = ""
for elem in a:
    s = s + str(V[elem])


Zamieniamy na liczbę całkowitą:
Kod:

s = int(s)


Odpalamy funkcję wyszukującą przedstawienie potęgowe:
Kod:

import math

def oblicz(x):
   w = x
   while x !=0:    
        imin = 2
        for i in [2, 3, 5, 7, 11]:
            z = int(math.log(x, i))
            s = x-i**z
            if s < w:
                w = s
                imin = i
                zmin = z
        print(imin, zmin)
        x = w

oblicz(s)


I okazuje się, że powyższy tekst można zakodować jako liczbę (domyślnie kubit):
Kod:

|2^500>


Konwersja w drugę stronę analogiczna do kodowania... nie wiem jak dla Was, ale dla mnie jest to ciekawe... Oczywiście w ogólnej sytuacji sprawa jest bardziej skomplikowana... ^^
_________________________________________________________________________________________

_________________
miasto nauki praktycznej
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Odwiedź stronę autora Numer GG
Wyświetl posty z ostatnich:   
Odpowiedz do tematu    Forum Coders' city Strona Główna -> Algorytmy + inżynieria oprogramowania Wszystkie czasy w strefie CET (Europa)
Idź do strony Poprzedni  1, 2, 3, 4  Następny
Strona 2 z 4

 
Skocz do:  
Możesz pisać nowe tematy
Możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Możesz dodawać załączniki na tym forum
Możesz pobierać pliki z tego forum




Debug: strone wygenerowano w 0.14905 sekund, zapytan = 11
contact

| Darmowe programy i porady Jelcyna | Tansze zakupy w Helionie | MS Office Blog |