piątek, 9 listopada 2012

Rozwiązywanie równań - aplet z grą

Wracam do tematu rozwiązywania prostych równań, o którym pisałem przy okazji zadania z cegłą. Poniżej przedstawiam prototyp pewnej gry matematycznej (właściwie to nie aplet, jak napisałem w tytule, a zwykły javascript). Pierwsze wrażenia są zachęcające - może ktoś to rozwinie, a może ja to zrobię, jeśli znajdę czas.

ROZWIĄŻ RÓWNANIE !

Zadaniem gracza jest rozwiązanie równania. Przycisk z symbolem losuje nowe równanie do rozwiązania. Kolejne przyciski służą do wykonywania operacji na równaniu (pamiętacie zadanie o cegle - dokładanie cegieł na obie szalki, itp). Należy doprowadzić do sytuacji, w której po jednej stronie równania zostanie pojedyncze "X", nie pomnożone przez żadną liczbę, a po drugiej liczbowa wartość (np. X = 4).

To prosta gra, pojedyncza partia odpowiada dokładnie rozwiązaniu równania. Gdyby rozwinąć ten temat (może ktoś to zrobi - jeśli znajdę kiedyś podobny program/aplet - postaram się zamieścić tutaj informację) - otrzymalibyśmy narzędzie dydaktyczne !

Osoby, które uczą matematyki, albo - jeszcze lepiej - udzielają korepetycji (korepetycje pozwalają z bliższej odległości obserwować zmagania niedoświadczonego umysłu z matematyczną materią) uznają ten pomysł na pewno za coś ciekawego.

Tego typu gry pozwalają w przyjemny sposób przyspieszyć moment, w którym osoba ucząca się przeżywa coś w rodzaju olśnienia (albo jak niektórzy mówią - coś jej w umyśle "przeskakuje") i nagle wie już, jak się to robi ! (W tym przypadku - jak się rozwiązuje równania z jedną niewiadomą. Rzeczywiście, zadanie to należy do prostych - łatwo je zautomatyzować.) Jest to coś takiego, jak odkrycie taktyki w prostej grze komputerowej - sposobu, który gwarantuje, że z każdego labiryntu znajdziemy wyjście w skończonej liczbie kroków.

Gra zawiera pewien haczyk: niektóre rozwiązania prowadzą do ułamkowych wartości, a przyciski pozwalają operować tylko na liczbach całkowitych. Mnożenie i dzielenie może doprowadzić do utraty precyzji - błędy zaokrągleń nakładają się, kumulują i w rezultacie możemy skończyć w sytuacji bez wyjścia. Trzeba zawsze starać się zachowywać całkowite współczynniki, zwykle jest to możliwe.

Gra zawiera też ciekawostkę: mnożenie i dzielenie operuje na liczbach pierwszych; w pierwszej wersji miałem tylko mnożenie i dzielenie przez liczby od 2 do 7, okazało się to jednak niewystarczające kiedy przeglądarka wylosowała równanie:

5X + 1 = - 6X

Chcąc więc pomnożyć (lub podzielić) równanie przez jakąś liczbę, której nie ma na przyciskach (np. 10) trzeba ją rozłożyć w pamięci na czynniki (tutaj 10 = 2 × 5) i pomnozyć (lub podzielić) po kolei przez te czynniki.

A oto dłuższy przykład:

4X - 4 = -2 - X | / 4
X - 1 = -0.5 - 0.25X | + 1
X = 0.5 - 0.25X | - X
0 = 0.5 - 1.25X | × 2
0 = 1 - 2.5X | - 1
-1 = - 2.5X | × 2
-2 = - 5X | / 5
-0.4 = - X | × (-1)
0.4 = X | ROZWIĄZANIE !

Gracz otrzymał poprawne rozwiązanie, jak się jednak nabiedził ! Wszystko dlatego, że niepotrzebnie na początku szybko podzielił wszystko przez 4, musiał potem pomnożyć ! Widać tu, że przykład ten powstał zanim odkryłem, że brakuje dzielenia przez 11 !

Właściwa taktyka jest taka: po pierwsze zgromadzić wszystkie X-y po lewej (stosując dodawanie i odejmowanie), potem wszystkie liczby bez X po prawej (takim samym sposobem), a na końcu podzielić wszystko przez czynnik przy X.

I jeszcze kilka pomysłów na rozwinięcie i udoskonalenie tego programiku:

  • Cofanie ruchu ("Undo")
  • Zapis (przy użyciu "local storage" HTML5)
  • Mierzenie czasu rozwiązywania
  • Możliwość wpisywania własnego równania
  • Podpowiedzi systemu
  • Grupowanie (zwijanie) ciągów operacji (np. dwie operacje +3 i +4 dają +7)
  • Równania ze współczynnikami symbolicznymi (np. aX + 2b = b - 1)
  • Układy równań
  • Operacje na ułamkach zwykłych (widziałem gdzieś w sieci bibliotekę implementującą wieżę numeryczną ze Scheme w JavaScripcie)
  • ... i pewnie wiele innych możliwości

Zagadki i ćwiczenia

  1. Co zrobi program, jeśli równanie nie ma rozwiązania (np. 2X + 1 = 2X) ?
  2. Albo gdy równanie ma nieskończenie wiele rozwiązań (np. 3X = 3X) ?
  3. Jak długo trzeba było klikać przycisk , żeby uzyskać przykłady odpowiadające powyższym sytuacjom 😉 ?
  4. * Czy każde zadanie wylosowane przez program da się rozwiązać używając zestawu przycisków, który jest do dyspozycji ?

wtorek, 6 listopada 2012

Jeszcze raz o foreksie

Jeden z niedoszłych adeptów foreksu upierał się kiedyś przy poglądzie, że na wykresach kursów walutowych istnieją wyraźne trendy i że powinno dać się je wykorzystać. Pytany o źródło takiego przekonania, pokazywał wykresy i twierdził, że to po prostu widać. Kolega odpowiedział mu (znam osobiście obu), że to złudzenie, a dowodem tego miał być prosty eksperyment: wygenerowanie wykresu losowego przebiegu, który z prawdopodobieństwem 1/2 w każdej chwili czasu idzie w górę lub w dół - ruch Browna. Podobno bardzo często na takim wykresie człowiek dostrzega trendy i tendencje, a nawet formacje analizy technicznej.

Kolega był szybkim koderem, więc błyskawicznie napisał coś w tym rodzaju:

awk 'BEGIN {srand();x=1000;for (i=0;i<1000;i++) {if (rand()>rand())x++; else x--; print x;}}' > tmp.txt;echo "plot 'tmp.txt' with lines; pause 10"|gnuplot

Miał trochę szczęścia (lub pecha), bo wykres był akurat wyraźnie stromy, trend był widoczny jak na dłoni ! Kliknij poniżej klawisz "LOSUJ", a wylosujesz kolejną instancję danych.

W praktyce CZASEM trafi się przebieg losowy, który WYGLĄDA na losowy, zwykle wygląda na regularny. Wniosek z tego jest taki: nie patrz zbyt naiwnie na wykresy, stosuj matematykę. Jeśli wierzysz w to, że odkryłeś Świętego Graala, sprawdź to pięć razy. Słuchaj ostrzeżeń brokerów o wysokim stopniu ryzyka związanym z handlem na foreksie ! Istnieje wiele przesłanek skłaniających do wniosku, że dla małych graczy forex to czysty hazard. Więksi być może wiedzą więcej.

wtorek, 16 października 2012

Nowe auto

Ach, ile bym dał to,
By mieć nowe auto.
Jak wiele bym zniósł,
By mieć nowy wóz.

Dałbym złota górę,
By mieć nową furę.
Całą swą krwawicę
Poświęciłbym bryce.

Byłoby wspaniale !
Tak, to prawda, ale
Mam za mały dochód,
By kupić samochód.

niedziela, 7 października 2012

Przekręcanie słów

Człowiek jest w stanie bez trudu odczytać tekst, w którym wprowadzone zostały błędy - język ludzki jest nadmiarowy. Poniżej znajduje się przycisk, który miesza tekst widoczny na ekranie w sposób, który pozwala jednak go odczytać.

Sztuczka polega na tym, żeby za bardzo tego tekstu nie pomieszać. Dozwolona jest zamiana blisko położonych liter, przy czym pierwsza i ostatnia litera wyrazu powinny pozostać na swoich miejscach. Tak zakłócony kod mózg ludzki jest w stanie odszyfrować. Zobacz, co stanie się, jeśli dopuscimy większy stopień pomieszania liter.

czwartek, 4 października 2012

Wiedza w bazie danych

Czy może istnieć baza danych, zawierająca całą ludzką wiedzę, którą można przeszukiwać za pomocą języka zapytań podobnego do SQL ?

Coś takiego jest celem badaczy sztucznej inteligencji. Taką bazę danych nazywa się ontologią - i trzeba przyznać, że chociaż nie posiadamy jeszcze efektu końcowego - superinteligentnego robota, który odpowiada na wszystkie pytania, to jednak dotychczasowe wyniki badań są imponujące.

Przyjrzałem się ostatnio YAGO (Yet Another Great Ontology), jest to projekt nadający się do tego, by się z nim zapoznać, nawet, jeśli jest się amatorem w tych dziedzinach - posiada interfejs online-owy i względnie przystępny opis.

Sztuczna inteligencja z jednej strony powinna umieć porozumiewać się w języku naturalnym (to też ciekawa i dość już nawet zaawansowana dizedzina) ale przede wszystkim musi być wyposażona w wiedzę, którą określamy jako "common sense", czy "zdrowy rozsądek". Pewne podstawowe informacje są dla nas oczywiste, ale dla komputera nigdy - nawet najprostsze pojęcia i kategorie, którymi się posługujemy muszą być jakoś zaprogramowane.

Mamy Wikipedię - zawiera ona olbrzymie ilości danych, ale nie są ściśle skategoryzowane ani sparametryzowane. Zawiera jednak jakieś
kategorie (choć autorzy YAGO podają przykłady trudności: Elvis należy
do kategorii "Grammy Awards", choć nie jest NAGRODĄ a jej laureatem ...)
oraz INFOBOKSY - które są krokiem w kierunku uściślenia struktury danych.

Autorzy YAGO skorzystali z tych danych i z sieci semantycznej zawartej w WordNet (słownik języka angielskiego wyposażony w hierarchię powiązań semantycznych). Z połączenia tego powstała ontologia YAGO - można ją zapytać np. o polityków będących naukowcami, urodzonych w Hamburgu po roku 1900, albo o firmy założone w Berlinie przed 1970.

Nie jest to, jak się okazuje, jedyny tego typu projekt, jest ich już sporo, istnieje także bogata literatura na temat ontologii specjalistycznych.

YAGO i WordNet są dobrymi miejscami, gdzie można zajrzeć, nawet jeśli się nie zajmuje sztuczną inteligencją na co dzień, ale chce się
zapoznać z tym tematem, choćby pobieżnie.

środa, 3 października 2012

Rodzaje organizmów


W dzieciństwie dowiadujemy się, że żywe organizmy dzielą się na rośliny i zwierzęta i z niejakim zdziwieniem, ale też z radością przyjmujemy do wiadomości, że my (ludzie) też należymy do zwierząt.

Potem dowiadujemy się o bakteriach - dawniej uczono, że są one roślinami, ale dziś już wiemy, że nie. Nie są też jednak zwierzętami - cała sprawa jest skomplikowana, bo chcąc odpowiedzieć na pytanie, czy bakteria jest zwierzęciem, musimy sami zdefiniować, co rozumiemy, co chcemy rozumieć przez zwierzę.

A są jeszcze wirusy - coś, co nawet nie wiadomo, czy jest żywe, ale składa się z białek i kwasów nukleinowych i jakoś tam prawie żyje. O wirusach dowiadujemy się też dość wcześnie.

Stan obecnej wiedzy na temat klasyfikacji żywych organizmów jest mniej więcej następujący:

Wszystkie organizmy żywe na naszej planecie (a wielu naukowców sądzi, że na innych również) składają się z podstawowych elementów - komórek - które mają wiele cech wspólnych, ale są też bardzo zróżnicowane. Zbudowane są z białek, tłuszczy i czegoś tam jeszcze i potrafią się powielać (rozmnażać, kopiować) dzięki skomplikowanym reakcjom chamicznym z udziałem kwasów nukleinowych RNA i DNA.

Niektóre z tych organizmów składają się z jednej komórki, (jednokomórkowce) a niektóre z wielu (wielokomórkowce). Komórki te (w zależności od gatunku organizmu) mogą być proste, lub bardziej skomplikowane, mogą zawierać pewne podstruktury, będące same jakby mini-komórkami.

Istnieje wielka grupa organizmów (należą do niej rośliny, zwierzęta i my), których komórki zawierają jądro - dużą wydzieloną strukturę, w której zachodzą ważne reakcje i która steruje komórką. Są to eukarionty. Nie-eukarionty to prokarionty - są prostsze i o ile wiem, zawsze jednokomórkowe. To właśnie do nich należą bakterie.

Eukarionty podzielono początkowo na protisty, grzyby, rośliny i zwierzęta. Grzyby na poziomie komórkowym bardziej przypominają zwierzęta niż rośliny. Protisty to szeroka kategoria pierwotniaków, do której zaliczono wszystko, co nie jest grzybem, rośliną lub zwierzęciem. Podział ten był długo uznawany i dlatego jest popularny - dzisiaj oceniany jest raczej jako sztuczny.

Obowiązująca obecnie klasyfikacja eukariontów bazuje na dokładniejszej wiedzy o budowie ich komórek i opiera się na sześciu "supergrupach" (Opisthokonta, Amoebozoa, Excavata, Rhizaria, rośliny i Chromalveolata). Zwierzęta i grzyby (razem z paroma jeszcze innymi kladami przynależą do supergrupy Opisthokonta.

Oto (pochodzący z zasobów Wikimedia Commons) schemat podziału eukariontów:


rys: Agnieszka Kwiecień, licencja: CC-BY 3.0

Cegła i piórko, czyli co to jest równanie

Jesteś wykształcony ? A czy wiesz, co to są równania - i po co są równania, do czego służą ?

Chociaż każdy z grubsza wie, co to jest równanie, sporo ludzi nie ma wyrobionej intuicji dotyczącej ich użycia - układania i rozwiązywania.

Tymczasem pewne proste reguły matematyki może pojąć kaźdy, skoro uczy się ich dzieci w szkole ...

Równanie to sposób zapisu związku między wielkościami, o których mówimy - tak, by łatwo było nam o nich wnioskować. W życiu spotykamy się z licznymi problemami, które upraszczają się znacznie, jeśli zastosujemy równanie.

Na przykład:

  • Ile pracodawca płaci za godzinę brutto, jeśli za sto dziesięć godzin zapłacił do ręki 1290 zł, a stawka podatku wynosi 19 % ?

  • Ile farby potrzeba na kwadratowy pokój o powierzchni 8 metrów i wysokości 2.40, jeśli na metr ściany trzeba 7 l ?

  • Ile pali samochód na 100 km, jeśli jechał dwie godziny z prędkością 140,
    a zapłaciliśmy 26 zł za benzynę po 6.10 zł za litr ?
Czy czegoś to Wam nie przypomina ? No tak - zadania tekstowe ! Przychodzą na myśl słynne pociągi ze stacji A do stacji B, ale w dzisiejszych czasach założenie o stałej prędkości pociagu jest rażąco nierealistyczne ...

Znane są też następujące anegdotyczne zagadki:

  • Cegła waży kilo i pół cegły, ile ważą dwie cegły ?
  • Kapelusz z piórkiem kosztuje dwa dwadzieścia. Kapelusz jest droższy od piórka o dwa złote; ile kosztuje piórko ?
Rozwiązywanie takich zadań tekstowych składa się z dwóch etapów: z ułożenia równania i z jego rozwiązania. Omówię to na przykładzie owej cegły i piórka, ponieważ zadanie to łatwo zobrazować wizualnie. Po pierwsze : szukamy równania. Zadanie o cegle ukrywa przed niewprawnym czytelnikiem poszukiwane równanie, bo jest wypowiedziane zwięźle, nie zawiera sformułowań "równa się, jest równe", a pytanie jest włączone w treść. Aby je rozplątać, należy się skupić, wysilić, uspokoić (to najważniejsze) i wyobrazić sobie całą rzecz plastycznie:

Może - zamiast wypisywania równania, które tu zobrazowano, przejdziemy od razu do jego rozwiązania - na rysunku, bez zapisu algebraicznego. Mamy "sytuację szalkową", tzn. jakąś wagę, na której coś leży, a waga jest w równowadze. Będziemy się starali wyobrazić takie operacje, które doprowadzą nas do końca GRY . Bo to jest GRA - zdejmuj lub wkładaj coś na wagę w taki sposób, aby dojść do sytuacji, gdy na jednej szalce są dwie cegły (nie więcej i nie mniej), na drugiej pewna liczba odważników (ale żadnych cegieł), a waga jest w równowadze. Szukamy zatem przejścia z sytuacji początkowej do następującej sytuacji końcowej:

Nie wiemy ile odważników będzie po prawej stronie (to jest nasze pytanie - ile ważą dwie cegły, stąd wielokropek na prawej szali !), nie wiemy też ile będzie potrzeba kroków. Dozwolone operacje nie powinny wychylić wagi ze stanu równowagi.

NIE WOLNO więc:

  • (zasada 1) zdejmować ani kłaść niczego tylko po jednej stronie wagi
WOLNO zaś:
  • (zasada 2) po obu stronach wagi położyć lub zdjąć równoważne ciężary
  • (zasada 3) zamienić szale miejscami

Oto jak mogłyby wyglądać możliwe próby:
Na obie szalki dołożyliśmy po cegłówce, ale chyba nie wiemy, co dalej ... Może spróbujemy inaczej, dołożymy po półtorej cegłówki:
... i co dalej ? Nie bardzo wiemy ... W takim razie spróbujmy odejmować:
Ściągamy z obu szalek po połówce cegłówki:
A w tym miejscu zauważmy, że skoro obie strony są równoważne, możemy obie podwoić i wtedy równowaga zostanie zachowana !
I znowu !
I mamy nasze rozwiązanie.

Nasze wagi szalkowe, to równania. Odważniki to liczby, a cegły to niewiadome, na przykład X . Sytuacja wyjściowa odpowiada równaniu:

X = 1 + ½ X

A kroki naszego rozwiązania zapisuje się następująco:

X = 1 + ½ X

½ X = 1

X = 2

2 X = 4

A teraz kapelusz i piórko. To zadanie można rozwiązać przy pomocy układu dwóch równań. Zasada jest taka sama. Należy wyobrazić sobie dwie wagi i operacje na nich (co prawda mowa tu o cenie, nie o wadze, więc pewnie trzeba by wyobrażać sobie jakieś cenniki, albo faktury ...). Mamy dwie niewiadome, ale nic nam to nie szkodzi. Dotąd manewrujemy ciężarami, aż na lewej szalce zostanie to, o co chodzi (w tym wypadku P) a na prawej jakaś liczba bez niewiadomych.

K + P = 2.20     ( Kapelusz z piórkiem kosztuje 2.20 )

K = P + 2     ( Kapelusz jest droższy od piórka o 2 złote )

Wkładamy wszystko na jedną wagę (dodajemy równania stronami):

2 K + P = 4.20 + P

Ściągamy z obu szalek piórko:

2 K = 4.20

Dzielimy to na pół:

K = 2.10

Z tekstu zadania wnioskujemy, że: P = 0.10