示例#1
0
文件: NSGA_II.cpp 项目: werty/PSOEVO
void NSGA_II::Mutuj(Solution * S) {
    for (unsigned int i_zmienna = 0; i_zmienna < problem->zmienne.size(); i_zmienna++) {
        for (int i_bit = 0; i_bit < il_bitow; i_bit++) {
            if (losuj(0.0, 1.0) < prawd_mutacji) {
                S->genotyp[i_zmienna][i_bit] = !S->genotyp[i_zmienna][i_bit];

            }
        }
    }

}
示例#2
0
void Symulacja::rok(Restauracja restauracja){
    zaludnijWektorKlientow(); // pobiera z bazy wszystkie adresy email i tworzy na ich podstawie obiekty klasy KlientOnline, nastepnie tworzy taka sama liczbe obiektow klasy Klient Stacjonarny
    pobierzNazwyPizzy(); // pobiera z bazy nazwy pizzy, aby na ich podstawie klient mogl skladac zamowienia
    for (int i=1;i<=365;i++) {
        // dzień:
        int iloscZamowionychPizzWCiaguDnia = losujIloscZamowionychPizzWCiaguDnia(); // losuje wartosc miedzy 10 a 20
        int iloscZamowienWCiaguDnia = iloscZamowionychPizzWCiaguDnia * 0.8; // bo czesc klientow zamowi wiecej niz jedna pizze
        int ileKlientow = iloscZamowienWCiaguDnia;
        
        for (int i=0;i<ileKlientow;i++){
            int ktoryKlient = losuj(0, (int)wektorKlientow.size()-1); // losuje numer/indeks klienta, ktory ma zamowic
            string nazwaPizzy = nazwyPizzy[losuj(0, (int)nazwyPizzy.size())];

            Zamowienie zamowienie = wektorKlientow[ktoryKlient]->zamow(losuj(0, 1), nazwaPizzy, losujLiczbe());
            restauracja.akceptujZamowienie(zamowienie);
        }
        cout << "Dzien: " << i << endl;
            // funkcja zamow zwraca nowe zamowienie, teraz pozostaje przekazac je do realizacji tj. ulepic nowe pizze i zapisac w bazie odpowiednie wartosci dotyczace sprzedazy i wartosci zakupionych przez klienta
    }
    restauracja.wyswietlPodsumowanie();
}
示例#3
0
文件: NSGA_II.cpp 项目: werty/PSOEVO
void NSGA_II::MakeNewPop() {
    //  QVector<Solution*>* Q = new QVector<Solution*>();
    int ind1, ind2;
    for (int i = 0; i < wiel_pop; i++) {
        ind1 = losuj(0, rodzice.size() - 1);
        ind2 = ind1;
        while (ind1 == ind2) {
            ind2 = losuj(0, rodzice.size() - 1);
        }
        // DINFO;

        // qDebug() << "ind1 " << ind1 << " ind2 " << ind2 << "\n";
        if (CrowdedComparisonOperator(rodzice[ind1], rodzice[ind2])) {
            //  DINFO;
            rodzenstwo.push_back(new Solution(*(rodzice[ind1])));
        } else {
            //  DINFO;
            rodzenstwo.push_back(new Solution(*(rodzice[ind2])));
        }

        //  DINFO;
        if (i > 0 && ((i % 2) == 0))//dla parzystego indesku bierzemy 2 ostatnie osob. i wyk. mut. krzyz.
        {
            if (losuj(0.0, 1.0) < prawd_krzyz) {
                Krzyzuj(rodzenstwo[i], rodzenstwo[i - 1]);

            }

            Mutuj(rodzenstwo[i]);
            Mutuj(rodzenstwo[i - 1]);
        }

        //  DINFO;
    }


}
示例#4
0
文件: NSGA_II.cpp 项目: werty/PSOEVO
void NSGA_II::Krzyzuj(Solution * S1, Solution* S2) {
    int maks = il_bitow * problem->zmienne.size();
    int m = losuj(1, maks - 1);

    for (int i = m; i < maks; i++) {


    }
    int indeks = 0;
    bool tmp;
    for (unsigned int i_zmienna = 0; i_zmienna < problem->zmienne.size(); i_zmienna++) {
        for (int i_bit = 0; i_bit < il_bitow; i_bit++) {
            if (indeks >= m) {
                tmp = S1->genotyp[i_zmienna][i_bit];
                S1->genotyp[i_zmienna][i_bit] = S2->genotyp[i_zmienna][i_bit];
                S2->genotyp[i_zmienna][i_bit] = tmp;
            }
            indeks++;

        }
    }
}
int main(void)
{
	int tab[WYMIAR];
	int klucz;
	int indeks;

	losuj(tab, WYMIAR);
	drukuj(tab, WYMIAR);
	printf("\n");

	printf("podaj element ktorego szukasz:");
	scanf("%d", &klucz);
	
	indeks=znajdz(tab, WYMIAR, klucz);
	
	if(indeks!=-1)
		printf("znaleziony element ma indeks tablicy numer %d\n", indeks);
	else
		printf("nie znaleziono podanego elementu\n");
	
	return 0;
}
示例#6
0
void Roslina::zasiew(Swiat &swiat, int i, int j)
{
	int a = rand() % 100;
	Polozenie nowe;
	if (a <3)
	{
		nowe = losuj();
		if (this->rysowanie() == GUARANA)
		{
			if (swiat.getSymbol(nowe.x,nowe.y) != ' '){} // jezeli wylosuje miejsce zajete to nie urosnie nowa
			else
			{
				swiat.stworzOrganizm(swiat, GUARANA, nowe.x, nowe.y);
			}

		}
		else if (this->rysowanie() == TRAWA)
		{
			if (swiat.getSymbol(nowe.x, nowe.y) != ' '){} // jezeli wylosuje miejsce zajete to nie urosnie nowa
			else
			{
				swiat.stworzOrganizm(swiat, TRAWA, nowe.x, nowe.y);
			}

		}
		else if (this->rysowanie() == WILCZAJAGODA)
		{
			if (swiat.getSymbol(nowe.x, nowe.y) != ' '){} // jezeli wylosuje miejsce zajete to nie urosnie nowa
			else
			{
				swiat.stworzOrganizm(swiat, WILCZAJAGODA, nowe.x, nowe.y);
			}


		}
		swiat.logi(this->rysowanie(), " rozmnaza sie ", swiat.getSymbol(nowe.x, nowe.y));
	}
}
示例#7
0
void Mlecz::akcja(Swiat &swiat, int i, int j)
{
	//3 proby rozmnozenia 
	int a;
	int n = 0;
	Polozenie nowe;
	while (n<3)
	{
		a = rand() % 100;
		if (a <1)
		{
			nowe = losuj();
			if (swiat.getSymbol(nowe.x,nowe.y) != ' '){}
			else
			{
				swiat.stworzOrganizm(swiat, MLECZ, nowe.x, nowe.y);
			}
		}

		n++;
	}

}
//===========================================================================================
int main()
{
	DDRB = 0b11111111;
	DDRD = 0b01111111; //PD7 jako przycisk
	PORTD = (1 << PD7);
	DDRC = (0 << PD7);
	pusto(); //wygaszenie ekranu

	ADMUX = (0 << REFS1) | (1 << REFS0); //wybor napiecia referencyjnego do ADC (Vcc)
	MCUCR = (1 << SE) | (1 << SM1); //konfiguracja sleep mode

	int czas=pomiar();

	losuj(); //liczba prawdziwie losowa
	srand(liczba_RND); //bedzie naszym seedem do randomizera

	zeruj();

	while (1)
	{
		do
		{
			liczba_RND = rand() % (iloscUczniow); 
		} while (czyWylosowana(liczba_RND) == 1); //losowanie bez powtórzeń

		eeprom_update_byte((uint8_t *) liczba_RND, 1); //zapisywanie wylosowanej liczby do pamięci EEPROM
		eeprom_busy_wait(); //oczekiwanie na zakończenie procesu zapisywania

		show(liczba_RND + 1); //wyświetlanie wylosowanej liczby na ekran.
		
		for (int i = 0; i <czas  + 100; i++) //wyświetlanie liczby przez określony czas
			_delay_ms(10);
		
		pusto(); //wygaszenie ekranu
		sleep_cpu(); //przejście w tryb uśpienia
	}
}
示例#9
0
void Wilk::akcja(Swiat &swiat, int i, int j)
{
	nowe = losuj();
	this->kolizja(swiat, i, j);
	wiek++;
}
示例#10
0
int Symulacja::losujLiczbe(){
    int tab[] = {1, 1, 1, 1, 1, 1, 1, 1, 0, 0};
    int temp = tab[losuj(0, 9)];
    if (temp==1) return 1;
    else return losuj(2, 5);
}
示例#11
0
int Symulacja::losujIloscZamowionychPizzWCiaguDnia(){
    return losuj(4, 8);
};