Forum www.zinfa.fora.pl Strona Główna
FAQ Szukaj Użytkownicy Grupy Profil Zaloguj się, by sprawdzić wiadomości
Forum www.zinfa.fora.pl Strona Główna  Zaloguj  Rejestracja
Optymalizacja
Idź do strony 1, 2, 3, 4  Następny
 
Napisz nowy temat   Odpowiedz do tematu    Forum www.zinfa.fora.pl Strona Główna -> Rok IV / Opracowania, pomoce IV
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
qbass




Dołączył: 11 Paź 2010
Posty: 17
Przeczytał: 0 tematów

Ostrzeżeń: 0/5
Skąd: Poznań/Piła/Loughrea

PostWysłany: Pią 13:59, 15 Paź 2010    Temat postu: Optymalizacja

Ktoś zna dokładne treści zadań? JA niby napisałem jakies dwa programy ale tak naprawdę nie jestem do końca pewien czy o to chodziło...

Post został pochwalony 0 razy
Powrót do góry
Zobacz profil autora
Autor Wiadomość
Rind




Dołączył: 24 Wrz 2010
Posty: 74
Przeczytał: 0 tematów

Pomógł: 3 razy
Ostrzeżeń: 0/5

PostWysłany: Pią 23:00, 15 Paź 2010    Temat postu:

Dla utworzonej przykładowej czarnej skrzynki z zadania 1 musisz napisać skrypt optymalizujący dla podanych wyników.

Jak w 1 zadaniu miałeś metodą heurystyczną (losowymi liczbami) znaleźć minimum funkcji dla których podawało się losowe liczby z przedziału <0, 1> i przez "czarną skrzynkę" dostawałeś punkt w n-przestrzeni, tak w zadaniu drugim trzeba napisać skrypt który z wyciągniętej 'minimum' (musisz zapisać gdzieś liczby które wrzucałeś do skrzynki i jaki dostałeś wynik) poruszasz się o podanym przykładowym epsilon (np. 0.1) na plus i minus każdej z liczb i te zmienione liczby ponownie wrzucasz do czarnej skrzynki, porównujesz z wynikiem jaki miałeś wcześniej no i jeżeli wynik jest mniejszy - wykonujesz ponownie tę funkcję na tym zestawie liczb i punktu. I tak robisz około 20 "kroków" żeby wyciągnąć to minimum minimum funkcji.

Mój solver w Javie (z 1 przykładu) wyglądał tak:
Kod:

public void solve() {
        int i = 0;
        int max = 10000;

        float najmniejsza = 0;

        float[] liczby_losowe = new float[5];

        for (i = 0; i < max; i++) {
           
            for (int j = 0; j < liczby_losowe.length; j++) {
                liczby_losowe[j] = this.generator.nextInt();
            }

            float cs_wynik = this.cs.value(liczby_losowe[0], liczby_losowe[1], liczby_losowe[2], liczby_losowe[3], liczby_losowe[4]);

            if (najmniejsza > cs_wynik) {
                System.out.println("ustawiam najmniejszą: "+ cs_wynik);
                najmniejsza = cs_wynik;
            }

            System.out.println("próba nr: "+ (i + 1) +". wynik: "+ cs_wynik +", wartość najmniejsza: "+ najmniejsza);
        }

    }


Przekazywałem do czarnej skrzynki 5 liczb. I teraz jak znalazłem moje minimum, to teraz muszę pobawić się moją tablicą 'liczby_losowe' muszę dodać lub odjąć moje zadane epsilon, żeby uzyskać nowy wynik i ewentualnie podać jako minumum.

Dodatkowo trzeba pamiętać o tym, żeby nie wyjść poza zakres <0, 1>, dla przykładu jak jedna z naszych liczb ma wartość powiedzmy 0.99 i chcemy dodać epsilon 0.1, wtedy teoretycznie mamy wynik 1,09, ale jako, że mamy zakres <0, 1> wtedy ustawiamy liczbie maksymalną możliwą wartość (w tym przypadku 1)

Pozdro,
Rind


Post został pochwalony 1 raz
Powrót do góry
Zobacz profil autora
Autor Wiadomość
qbass




Dołączył: 11 Paź 2010
Posty: 17
Przeczytał: 0 tematów

Ostrzeżeń: 0/5
Skąd: Poznań/Piła/Loughrea

PostWysłany: Sob 9:28, 16 Paź 2010    Temat postu:

Pieknie dziekuje cos z tego ogarne i przygarne na swoj c# rozum...

Post został pochwalony 0 razy
Powrót do góry
Zobacz profil autora
Autor Wiadomość
qbass




Dołączył: 11 Paź 2010
Posty: 17
Przeczytał: 0 tematów

Ostrzeżeń: 0/5
Skąd: Poznań/Piła/Loughrea

PostWysłany: Sob 21:37, 16 Paź 2010    Temat postu:

Chyba i tak tego nie ogarne... slabo to widze...

Post został pochwalony 0 razy
Powrót do góry
Zobacz profil autora
Autor Wiadomość
qbass




Dołączył: 11 Paź 2010
Posty: 17
Przeczytał: 0 tematów

Ostrzeżeń: 0/5
Skąd: Poznań/Piła/Loughrea

PostWysłany: Nie 11:03, 17 Paź 2010    Temat postu:

Troche nad tym posiedziałem dzisiaj przerobiłem to na c#, jednak wg. mnie coś tu nie działa tak jak należy...
Kod:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication7
{
    class Program
    {
        // zad1. Napisać program na liczenie objętości kuli w przestrzeni N wymiarowej.
        class losowe
        {
            //generator liczb losowych
            public float liczbalos()
            {
                Random x = new Random();
                return x.Next(1, 10000);

            }
        }
        static void Main(string[] args)
        {
            //deklaracja zmiennych...
            int i = 0;
            int max = 10000;
            float najmniejsza = 0;
            // deklaracja tablicy...

            float[] liczby_losowe = new float[5];

            for (i = 0; i < max; i++)
            {
                for (int j = 0; j < liczby_losowe.Length; j++)
                {
                     float y;
            losowe los1 = new losowe();
         
            y = los1.liczbalos();
            liczby_losowe[j] = y;

                }
                //przypisanie zmiennnej do tablicy...

                float cs_wynik;
                cs_wynik = liczby_losowe[0];
                cs_wynik = liczby_losowe[1];
                cs_wynik = liczby_losowe[2];
                cs_wynik = liczby_losowe[3];
                cs_wynik = liczby_losowe[4];
                if (najmniejsza > cs_wynik)
                {
                    Console.WriteLine("ustawiam najmniejszą:" + cs_wynik);
                    najmniejsza = cs_wynik;
                    Console.ReadKey();

                }
                Console.WriteLine("próba nr:" + (i + 1) + ". wynik:" + cs_wynik + ",wartość najmniejsza:" + najmniejsza);
                Console.ReadKey();
            }


        }
    }
}


Post został pochwalony 0 razy
Powrót do góry
Zobacz profil autora
Autor Wiadomość
Rind




Dołączył: 24 Wrz 2010
Posty: 74
Przeczytał: 0 tematów

Pomógł: 3 razy
Ostrzeżeń: 0/5

PostWysłany: Nie 13:04, 17 Paź 2010    Temat postu:

No oczywiście, że nie działa, ponieważ:
Kod:

float cs_wynik;
                cs_wynik = liczby_losowe[0];
                cs_wynik = liczby_losowe[1];
                cs_wynik = liczby_losowe[2];
                cs_wynik = liczby_losowe[3];
                cs_wynik = liczby_losowe[4];
                if (najmniejsza > cs_wynik)

Ten kawałek kodu jest kompletnie bez sensu. Przypisujesz do zmiennej cs_wynik jakąś losową wylosowaną liczbę a później sprawdzasz najmniejszą jej wartość.
Najpierw trzeba przypisać do tablicy liczby_losowe jakichś 5 losowych liczb a później te liczby przekazać do czarnej skrzynki (której w tym kodzie w ogóle nie ma) i wynik z tej czarnej skrzynki dopiero porównywać, czy wartość jest mniejsza od wcześniejszej obliczonej...


Post został pochwalony 0 razy
Powrót do góry
Zobacz profil autora
Autor Wiadomość
qbass




Dołączył: 11 Paź 2010
Posty: 17
Przeczytał: 0 tematów

Ostrzeżeń: 0/5
Skąd: Poznań/Piła/Loughrea

PostWysłany: Nie 14:15, 17 Paź 2010    Temat postu:

Dzieki za analize i wsparcie postaram sie to poprawic znaczy ze jestem blisko i powoli zaczynam sie odnajdywac w c#

Post został pochwalony 0 razy
Powrót do góry
Zobacz profil autora
Autor Wiadomość
armo




Dołączył: 14 Paź 2010
Posty: 40
Przeczytał: 0 tematów

Pomógł: 1 raz
Ostrzeżeń: 0/5

PostWysłany: Pon 19:02, 18 Paź 2010    Temat postu:

Moje rozwiązanie do Kuli, ale w javie Sad

Kod:

package zfakuio_kula;

import java.util.Random;

/**
 *
 * @author s370650 Artur Mańko
 */
public class Kula {

    /**
     *
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        int licz = 0;
        long lba=10000;
        long wym=3;
        Random R = new Random();

        for(long i=0; i<lba; i++){
            double odl=0.0;
            for(int j=0;j<wym;j++){
                double wylosowana = R.nextDouble();
                wylosowana *= wylosowana;
                odl += wylosowana;

            }
            if( odl<=1.0 )
                licz++;
        }
        System.out.println((double)licz/(double)lba);
    }

}



Post został pochwalony 0 razy
Powrót do góry
Zobacz profil autora
Autor Wiadomość
qbass




Dołączył: 11 Paź 2010
Posty: 17
Przeczytał: 0 tematów

Ostrzeżeń: 0/5
Skąd: Poznań/Piła/Loughrea

PostWysłany: Pon 21:32, 18 Paź 2010    Temat postu:

C# zad1 monte carlo proste bez ulepszenia:
Kod:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Blackbox_pocz
{

    class Program
    {
        public class Black_Box1
        {
            static void Main(string[] args)
            {
               //Czarne pude³ko..
                //Zwraca minimum funkcji...
                Rosnie rosnoca = new Rosnie();
                Console.WriteLine(Black_Box.rozwiazanie(rosnoca));
                Console.ReadKey();
            }

        }

        internal interface BlackBox
        {
            double wartosc(double a1, double a2, double a3, double a4, double a5, double a6);

        }

        internal class Rosnie : BlackBox
        {
            public virtual double wartosc(double a1, double a2, double a3, double a4, double a5, double a6)
            {

                return a1 + a2 + a3 + a4 + a5 + a6;
            }

        }

        internal class Black_Box
        {
            internal static double rozwiazanie(BlackBox blackBox)
            {
             
                double a0;
                Random random = new Random();
                a0 = random.Next();
                double min;
                min= blackBox.wartosc(random.NextDouble(), random.NextDouble(), random.NextDouble(), random.NextDouble(), random.NextDouble(), random.NextDouble());
                for (int i = 1000; i > 0; i--)
                {
                    double nast_war;
                        nast_war= blackBox.wartosc(random.NextDouble(), random.NextDouble(), random.NextDouble(), random.NextDouble(), random.NextDouble(), random.NextDouble());

                        if (nast_war < min)
                    {
                        nast_war = min;
                    }
                }
                return min;
            }

        }
    }
}

Na podstawie kodu Artura


Post został pochwalony 0 razy
Powrót do góry
Zobacz profil autora
Autor Wiadomość
qbass




Dołączył: 11 Paź 2010
Posty: 17
Przeczytał: 0 tematów

Ostrzeżeń: 0/5
Skąd: Poznań/Piła/Loughrea

PostWysłany: Czw 11:31, 21 Paź 2010    Temat postu:

z ulepszeniem tez na podstawie kodu Artura w c#:
Kod:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Blackbox_ulepsz
{

    //Zad2. Ulepszenie dzia≥ania funkcji prostej Monte_Carlo o losowanie najmniejszego z najmniejszych wynikůw...
    class Program
    {
        public class dopalacz
        {
            public static double epsilon = 1e-5;
            internal static Random random = new Random();
            static void Main(string[] args)
            {
   
                int proobki = 1000;
                int LepszyEpsilon = 10;
                int powtoorki = 100;
                Console.WriteLine("Najmniejsza Wartoúś funkcji wyliczona metodĻ Monte_Carlo z ulepszeniem:"+DopalaczSolve(new Rosnie(), proobki, LepszyEpsilon, powtoorki));
                Console.ReadKey();
            }


           †// Funkcja realizujĻca ulepszenie wynikůw prostego Monte_Carlo
            internal static double DopalaczSolve(BlackBox skrzynka, int proobki, int LepszyEpsilon, int powtoorki)
            {
                 † † † †// Obliczenie z≥oŅonoúci obliczeniowej, wykorzystanie ulepszenia MC i zapisanie wyniku ulepszenia...
                double[] wynikBb;
                double wynik = double.MaxValue;
                do
                {
                   
                    wynikBb = Monte_Car(skrzynka, proobki);
                    wynikBb = UlepszenieMonte_Car(skrzynka, LepszyEpsilon, wynikBb);
                    wynik = (wynik < wynikBb[6]) ? wynik : wynikBb[6];
                }
                while (--powtoorki > 0);

         
                return wynik;
               
            }
             
//Metoda Monte_Carlo............... †
            internal static double[] Monte_Car(BlackBox skrzynka, int proobki)
            {
                double[] wynik = new double[7];
                double[] nast_war = new double[7];
                for (int j = 0; j < 6; j++)
                    wynik[j] = RandomDb();
                wynik[6] = skrzynka.Wartosc(wynik);
                for (int i = proobki; i > 0; i--)
                {
                    for (int j = 0; j < 6; j++)
                        nast_war[j] = RandomDb();
                    nast_war[6] = skrzynka.Wartosc(nast_war);
                    if (nast_war[6] < wynik[6])
                        for (int j = 0; j <= 6; j++)
                            wynik[j] = nast_war[j];
                }
             
                return wynik;
           
            }
           
            internal static double[] UlepszenieMonte_Car(BlackBox skrzynka, int LepszyEpsilon, double[] wynikBb)
            {

                while (LepszyEpsilon-- > 0)
                    for (int j = 0; j < 6; j++)
                        for (int i = -1; i <= 1; i += 2)
                        {
                            wynikBb[j] = wynikBb[j] + (epsilon * i);
                            wynikBb[6] = skrzynka.Wartosc(wynikBb);
                            if (wynikBb[6] < wynikBb[6])
                                for (int k = 0; k <= 6; k++)
                                    wynikBb[k] = wynikBb[k];
                        }
                return wynikBb;
             
            }
             † †
            internal static double RandomDb()
            {

                return 2.0 * random.NextDouble() - 1.0;
            }

        }

        //Definicja interfejsu czarnej skrzyniki
        internal interface BlackBox
        {

            double Wartosc(double[] x);

        }

        // pprzyk≥ad funkcji badanej przez Bb...
        internal class Rosnie : BlackBox
        {
            † †
            public virtual double Wartosc(double[] a)
            {

                return a[0] + a[1] + a[2] + a[3] + a[4] + a[5];
            }
        }
    }
}


Post został pochwalony 0 razy
Powrót do góry
Zobacz profil autora
Autor Wiadomość
Rind




Dołączył: 24 Wrz 2010
Posty: 74
Przeczytał: 0 tematów

Pomógł: 3 razy
Ostrzeżeń: 0/5

PostWysłany: Wto 14:57, 30 Lis 2010    Temat postu:

Ciekawa symulacja wykorzystująca algorytmy genetyczne:

[link widoczny dla zalogowanych]

Pojazd dwu-kołowy próbuje się dostosować do otoczenia. Wykonuje 20 prób, znajduje najlepszy 'przejazd', mutuje, krzyżuje, znowu 20 prób i tak cały czas, póki nie uformuje się w taki sposób, żeby przejechał cały teren. Ciekawe Smile


Post został pochwalony 0 razy
Powrót do góry
Zobacz profil autora
Autor Wiadomość
wi3dzmin
Administrator



Dołączył: 21 Lis 2007
Posty: 342
Przeczytał: 0 tematów

Pomógł: 2 razy
Ostrzeżeń: 0/5
Skąd: Elbląg

PostWysłany: Wto 16:20, 30 Lis 2010    Temat postu:

Świetna rzecz! Fajny przykład Smile Kurde trzeba by coś swojego fajnego napisać w wolnej chwili Smile

Post został pochwalony 0 razy
Powrót do góry
Zobacz profil autora
Autor Wiadomość
qbass




Dołączył: 11 Paź 2010
Posty: 17
Przeczytał: 0 tematów

Ostrzeżeń: 0/5
Skąd: Poznań/Piła/Loughrea

PostWysłany: Nie 11:48, 12 Gru 2010    Temat postu:

Co mamy w końcu mu napisać jeszcze ? bo już sam nie wiem... a do zajęć został tydzień...

Post został pochwalony 0 razy
Powrót do góry
Zobacz profil autora
Autor Wiadomość
Rind




Dołączył: 24 Wrz 2010
Posty: 74
Przeczytał: 0 tematów

Pomógł: 3 razy
Ostrzeżeń: 0/5

PostWysłany: Nie 16:02, 12 Gru 2010    Temat postu:

Wy chodzicie na te zajęcia? Razz

Post został pochwalony 0 razy
Powrót do góry
Zobacz profil autora
Autor Wiadomość
qbass




Dołączył: 11 Paź 2010
Posty: 17
Przeczytał: 0 tematów

Ostrzeżeń: 0/5
Skąd: Poznań/Piła/Loughrea

PostWysłany: Wto 10:13, 14 Gru 2010    Temat postu:

Chodzimy....
do wczesniejszych algorytmow mamy dopisac mutacje takie ze:
1) wylosować populację początkową 10:08
2) policzyć średnie f 10:08
3)mutacja kiepskich wyników a krzyżowanie dobrych 10:08
4) powrót do (2)

Ale sposob na to jak zwykle zostal slabo przedstawiony.... ktos ma jakis pomysl?


Post został pochwalony 0 razy
Powrót do góry
Zobacz profil autora
Wyświetl posty z ostatnich:   
Napisz nowy temat   Odpowiedz do tematu    Forum www.zinfa.fora.pl Strona Główna -> Rok IV / Opracowania, pomoce IV Wszystkie czasy w strefie CET (Europa)
Idź do strony 1, 2, 3, 4  Następny
Strona 1 z 4

 
Skocz do:  
Nie możesz pisać nowych tematów
Nie 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
fora.pl - załóż własne forum dyskusyjne za darmo
Powered by phpBB © 2001, 2002 phpBB Group
BBTech Template by © 2003-04 MDesign
Regulamin