Wrocław 08.06.2006r.

Metody i algorytmy sztucznej inteligencji,

raport z wykonania dużego projektu



Rozwiązywanie prostych zadań z fizyki


     Autor:      Arkadiusz Grab
kierunek:     ARS
    nr ind.:      127710


  1. Opis zadania.
  2. Zastosowana metoda.
  3. Implementacja programowa.
  4. Przykłady działania programu.
  5. Wyniki działania programu.
  6. Wnioski.
  7. Materiały źródłowe.



Opis zadania

Moje zadanie projektowe polegało na napisaniu programu który będzie rozwiązywał proste zadania tekstowe z fizyki. Jest to dosyć złożony problem ze względu na różnorodność takich zadań. Zadnia które będzie rozwiązywał mój program to zadania w których mamy dane pewne wielkości fizyczne i na podstawie tych danych, według jednego ze znanych wzorów fizycznych  należy wyliczyć odpowiedź, czyli wielkość fizyczną która jest nieznana.  W celu wczytania zadania do programu, każde z nich  należy zapisać w pliku tekstowym. Aby możliwe było rozwiązanie konkretnego zadania trzeba będzie wybrać dział fizyki którego to zadanie dotyczy oraz podać nazwę pliku z zadaniem. Jeżeli program będzie potrafił rozwiązać zadanie to wyświetli rozwiązanie, w postaci symbolu jednostki fizycznej oraz jej wartości liczbowej i jednostki. W innym przypadku poinformuje nas że jest to niemożliwe albo że zadanie zawiera błędy w zapisie.



Zastosowana metoda rozwiązania problemu

Cały problem rozwiązania zadania tekstowego można z dekomponować na dwa mniejsze pod problemy. Jeden z nich, trudniejszy, polega na wyszukaniu w tekscie interesujących nas informacji niezbędnych do rozwiązania zadnia. Takimi informacjami są, wartości liczbowe wielkości fizycznych które są danymi w zadaniu oraz co na podstawie tych wielkości należy wyliczyć.
Drugi pod problem dotyczy wyboru metody wyliczenia rozwiązania naszego zadania, czyli wyboru odpowiedniego wzoru fizycznego do którego podstawimy wyekstrahowane wczesnej dane.

Aby rozwiązanie zadania było możliwe zdefiniowałem dla każdej klasy zadań bazę wiedzy, zapisaną w pliku tekstowym, opisującą te zadania, na jej podstawie program będzie wyszukiwał w tekscie zadania, wielkości danych i wielkości szukane, oraz wybierał odpowiedni wzór fizyczny. Baza zawiera  informacje na temat wielkości fizycznych  jakie mogą wystąpić w danej klasie zadań. A także przy pomocy jakich jednostek fizycznych są opisywane. I najważniejsze, wzory fizyczne które przedstawiają zależności zachodzące pomiędzy tymi wielkościami  fizycznymi. Oto przykład takiej bazy wiedzy dla zadań z działu 2 zasady dynamiki:

<WIELKOSCI>
jechal jechala predkosc predkoscia szybkosc szybkoscia predkosci | V m/s |
droga droge drogi odleglosc odleglosci odcinek trasa trase trasy przebedzie
przejechal przejechala przelecial kilometrow przejedzie | S [m] |
czas czasu czasie sekund przez ciagu trwalo uplywie | T s |
przyspieszenie przyspiesza przyspieszeniem opoznienie opoznieniem | A m/s^2  |
masa masie waga wadze wazy | M kg |
sila sile sily | F N |


<JEDNOSTKI>
km/h 0.277777777  km/min 16.6666 km/s 1000 m/h 3600 m/min 60 m/s 1 |
kilometrow 1000 kilometra 1000 kilometry 1000 kilometr 0.0001 km 1000 metr 1 metry 1 metrow 1 metra 1 m 1 |
h 3600 godz 3600 min 60 minut 60 minuty 60 sekund 1 sekundy 1 s 1 |
N 1 kN 1000 |
kg 1 dag 100 g 1000 |
km/h^2 0.0000771604 km/min^2 0.277777777 m/min^2 0.000277777 m/s^2 1 |

<WZORY>
# A = F : M        <END>
# F = A * M        <END>
# M = F : A        <END>
# T = M * V : F     <END>
# F = M * V : T     <END>
# M = F * T : V     <END>
# V = F * T : M        <END>


W pierwszej częsci <WIELKOSCI FIZYCZNE> są wymienione wszystkie słowa kluczowe, oddzielone spacją, które oznaczają wystąpienie w zadaniu wielkości fizycznej. Każdy ciąg takich słów kluczowych zakończony jest znakiem  |  za którym znajduje się symbol reprezentujący daną wielkość fizyczną oraz bezpośrednio za nim jednostka danej wielkości.
W kolejnej części
<JEDNOSTKI>  znajdują się jednostki wielkości fizycznych jakie mogą  wystąpić w  zadaniu.  Ze względu na to że każda wielkość fizyczna może być opisana za pomocy różnych jednostek, aby uniknąć błędów w obliczeniach, program sprowadza wszystkie jednostki do jednostek podstawowych układu SI, w tym celu w pliku bezpośrednio za jednostkami znajdują się wartości liczbowe ( mnożniki ). Po zidentyfikowaniu wartości wielkości fizycznej należy ją przemnożyć przez odpowiedni mnożnik aby dana wielkość fizyczna była opisana jednostką podstawową układu SI.
Ostatnia część
<WZORY>  bazy wiedzy zawiera wzory które opisują zależności pomiędzy wielkościami fizycznymi występującymi w danej  klasie zadań.
 

Aby móc poprawnie przetwarzać tekst zadania w celu wyciągnięcia z niego potrzebnych informacji, zacząłem od poprawnego jego wczytania w celu ułatwienia i zapewnienia poprawności jego analizy. Program wczytuje tekst zadania wyraz po wyrazie (ciągi znaków nie oddzielone spacją lub innymi znakami białymi ). Należy pamiętać o tym że na końcu kazdego  zdania, znajdują się znaki  interpunkcyjne,  które znajdują się bezpośrednio za wyrazem w zdaniu. W takich przypadkach program wczytuje wyraz który wygląda następująco:

prędkość,    lub     prędkość?

W takim przypadku podczas analizy program nie odczyta tego słowa jako słowo kluczowe, które oznacza wielkość fizyczną,
więc znaki interpunkcyjne są pomijane.
Druga ważna rzecz,  wartości wielkości fizycznych często są zapisywane następująco:

80km/h

W tym przypadku podczas wczytywania program wczytuje ten ciąg znaków jako dwa oddzielne, 80 i  km/h

Metoda ekstrahowania potrzebnych informacji z wczytanego tekstu.

Program przeszukuje wczytane ciągi znaków, i sprawdza czy nie są to słowa kluczowe. Jeżeli trafi na słowo kluczowe to tworzy zmienną i przypisuje jej odpowiedni symbol wielkości fizycznej i przeszukuje kolejne ciągi znaków. Jeżeli trafi na ciąg cyfr, to oznacza że wczesnej stworzona zmienna ( wielkość fizyczna ) jest daną w zadaniu i przypisujemy jej wartość reprezentowaną przez dany ciąg cyfr pomnożony przez odpowiedni mnożnik, zależny  od jednostki  znajdującej  się zaraz po ciągu cyfr.  Przykład:

    Samochód jedzie z prędkością równą 80km/h ....

W innym przypadku kiedy trafi na kolejne słowo kluczowe lub na koniec wczytanego tekstu, oznacza to że wcześniej wyznaczona zmienna jest szukaną w zadaniu.

    Z jaką 
prędkością jedzie samochód jeżeli w czasie 10as ...
    .... jaką prędkość ma samochód.

W przypadku gdy po jednym słowie kluczowym występuje drugie słowo kluczowe oznaczające tą samą wielkość fizyczną program nie definiuje dla tego słowa żadnej zmiennej. Drugie słowo kluczowe jest pomijane.

Dodatkowo jeśli w tekscie zostanie znalezione słowo kluczowe wielkości która  wcześniej  została już stworzona,  jest ono ignorowane aby nie tworzyć drugiej  zmiennej tej samej wielkości fizycznej, inaczej program mógłby wybierać zły wzór do wyliczenia rozwiązania.

    Samochód pokonał odcinek 20km/h  w czasie 30 minut z jaką z jaką średnią prędkością przejechał  tą drogę.

Jeśli posiadamy informacje dotyczące danych i szukanych w zadaniu, bez problemu możemy wybrać odpowiedni wzór przy pomocy którego wyliczymy odpowiedz do naszego zadania.
Program sprawdza która z wyekstrahowanych wielkości fizycznych posiada status szukanej a następnie wyszukuje wzorów które reprezentują jej zależność od innych wielkości fizycznych. Jeśli jest więcej niż jeden wzór który opisuje tą zależność,
program sprawdza czy wielkości fizyczne znajdujące się po prawej stronie wzoru odpowiadają danym wyekstrahowanym z tekstu zadania.

       F-szukana:
    
                      F = M * V : T
                            F = A * M
       A-dana
       M-dana
                       F=A*M

                


 

Implementacja programowa

Program został napisany w środowisku Borland C++ Builder v.6 .Program działa w trybie konsolowym. Nie obsługuje polskich znaków, więc należy pamiętać o tym przy pisaniu zadań. Informacje na temat poszczególnych  klas zadań przechowywane są w plikach tekstowych. Rozszerzenie możliwości rozwiązywania zadań z innych działów, ogranicza się głównie do zdefiniowania plików tekstowych opisujących te zadania . Oraz niewielkich zmian w kodzie programu .



Przykłady działania programu

Program działa w trybie konsolowym. Po uruchomieniu programu należy wybrać jeden z działów fizyki, do którego należy zadanie które chcemy rozwiązać, następnie program zapyta o nazwę pliku w którym znajduje się zadanie.
W odpowiedzi otrzymujemy wartość liczbową wielkości fizycznej która była szukana w zadaniu w jednostkach podstawowych układu SI. Jeśli natomiast program nie jest w stanie rozwiązać zadania to wyświetla komunikat że rozwiązanie zadania jest niemożliwe. 
Przykładowe zadania zostały zaczerpnięte z "Fizyka zbiór zadań dla gimnazjum" Leszek Bober.


    Przykład 1.  Zadanie z ruchu jednostajnego  1.24

          Samochod osobowy jechal po autostradzie ze srednia predkoscia 80km/h. Jaka trase przejechal ten samochod w ciagu 2.5 godziny

    Odpowiedz programu:

        Dana:                V = 22.2222 m/s
        Szukana:           S = ? m
        Dana:                T = 9000.0000 s

        Odpowiedz do zadania     S = 200000.0000 m 

   

    Przyklad 2.   Zadanie z ruchu jednostajnego  1.18

          Wzdluz drogi stoja slupki umieszczone co 100 m. Z jaka predkoscia poruszal sie samochod, jezeli odleglosc miedzy kolejnymi slupkami
           przebyl w ciagu 5 sekund?

    Odpowiedz programu:

         Dana:                V = 100.0000  m
         Szukana:           V = ?  m/s
         Dana:                T = 5.0000  s

         Odpowiedz do zadania     S = 20.0000 m/s



    Przyklad 3.   Zadanie z ruchu jednostajnego  1.25

          Samochod jedzie ze srednia predkoscia 72km/h. Jaka droge przejedzie samochod w ciagu 1 minuty, a jaka w ciagu 1 sekundy?

    Odpowiedz programu:

        Dana:                V = 20.0000  m
        Szukana:           S = ?  m/s
        Dana:                T = 1.0000  s

        Odpowiedz do zadania     S = 20.0000 m



    Przyklad 4.   Druga zasada dynamiki  2.38

          Samochod o calkowitej masie 1000 kg rusza z miejsca ruchem jednostajne przyspieszonym pod dzialaniem sily wypadkowej 1500 N. Oblicz           po jakim czasie uzyska on predkosc 54 km/h .
       
    Odpowiedz programu:

        Dana:               M = 1000.0000 kg
        Dana:               F  = 1500.0000  N
        Szukana:           T = ?  s
        Dana:                T = 15.0000  m/s

        Odpowiedz do zadania     S = 15.0000 s

   
   
    Przyklad 5.   Przyspieszenie  1.56

          Najwieksze przyspieszenie, jakie moze uzyskac pociag, wynosi 0.5m/s^2 . Jaka maksymalna predkosc moze uzyskac ten pociag po uplywie             10 sekund od rozpoczecia ruchu?
       
    Odpowiedz programu:

        Dana:               A  = 0.5000  m/s^2
        Szukana:           V = ? m/ s
        Dana:                T = 10.0000  s

        Odpowiedz do zadania    V= 5.0000 m/s    

Wyniki działania  programu


Poniższa tabela przedstawia wyniki testów programu na przykładowych zadaniach ze zbioru zadań z fizyki. Do testowania programu wybraliśmy zadania w których odpowiedź ma postać numeryczną i jest wyliczna z danych zapisanych w tekscie zadania. Wszelkie zadania do rozwiązania których potrzebne są wykresy, albo odpowiedz polega na wykorzystaniu wiedzy teoretycznej ( definicji, twierdzeń, własności itp.) i ma postać opisową, zostały odzrzucone. Zadania  takie nie są wliczane do ogólnej liczby zadań. Natomiast liczba rozwiązanych zadań, to liczba która określa ile zadań program rozwiązał poprawnie.

 
Dział
Ruch jednostajny prostoliniowy
Przyspieszenie w ruchu prostoliniowym
Druga zasada dynamiki
Prąd elektryczny
Ogólna liczba zadań
17
8
10

15

Liczba rozwiązanych
zadań

8
4
5
7

Wnioski


Program potrafi rozwiązywać zadania w których mamy dane pewne wielkości fizyczne i z tych wielkości należy wyliczyć inną nieznaną wielkość fizyczną. Bardzo ważną rzeczą jest poprawne wy edytowanie zawartości pliku definiującego zadania z określonego działu fizyki. W tym celu trzeba się dokładnie zapoznać z zadaniami aby wybrać odpowiednie słowa kluczowe oraz zdefiniować wszystkie możliwe jednostki wielkości fizycznych jakie mogą wystąpić w zadaniu. A  następnie  stworzyć  zbiór wszystkich  wzorów fizycznych z danego działu.
Program nie radzi sobie z zadaniami w których odpowiedz polega na wyliczeniu kilku wielkości fizycznych, albo jeżeli w zadaniach występują wartości początkowe i bieżące pewnych wielkości fizycznych. W takich przypadkach program rozwiązuje zadanie ale zwraca nam w odpowiedzi tylko jedna z szukanych wartości, czasami zdarza sie że jest to rozwiązanie poprawne.  Zastosowany algorytm nie rozwiązuje zadań  których należy wyliczyć i  porównać pewne wartości.
Wadą programu jest konieczność podania działu do którego należy zadanie które chcemy rozwiązać. Natomiast dużą zaletą jest łatwość w dodawaniu kolejnych działów fizyki poprzez tworzenie kolejnych plików definiujących nowe zadania.





Materiały źródłowe




    1.  Zbiór zadań z fizyki:    "Fizyka, zbiór zadań dla gimnazjum"      Leszek Bober

    2.  http://sequoia.ict.pwr.wroc.pl/~witold/aiuwr/2004_projekty/sifizyk/