Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "pch.h"
- #include <iostream>
- #include <fstream>
- #include <vector>
- #include <string>
- using namespace std;
- void print_vec(vector<int> &v)
- {
- for (int i = 0; i < v.size(); i++)
- cout << v[i] << " ";
- }
- void set_up_costs(vector<vector <double> > &costs)
- {
- ifstream file;
- file.open("matrice.txt.txt");
- if (!file.is_open())
- {
- cout << "nu s-a deschis fisierul \n";
- return;
- }
- int N;
- file >> N;
- double cost;
- for (int i = 0; i < N; i++)
- {
- vector <double> cost_lin;
- for (int j = 0; j < N; j++)
- {
- file >> cost;
- cost_lin.push_back(cost);
- }
- costs.push_back(cost_lin);
- }
- file.close();
- }
- vector<int> get_random_sol(vector<vector <double> > &costs)
- {
- vector <int> sol;
- vector<int> used;
- for (int i = 0; i < costs.size(); i++)
- {
- used.push_back(0);
- }
- for (int i = costs.size() - 1; i >= 0; i--)
- {
- int poz = (rand() + 1) % (i + 1);
- /*int nr_fol = 0;
- for (int j = 0; j <= poz; j++)
- if (used[j] == 1) nr_fol++;
- poz += nr_fol;
- while (used[poz] == 1)
- poz++;
- sol.push_back(poz);
- used[poz] = 1;*/
- sol.push_back(poz);
- }
- return sol;
- }
- double get_sol_val(vector<int> &sol, vector<vector <double> > &costs)
- {
- int val = 0;
- vector<int>perm;
- vector<int> used;
- for (int i = 0; i < costs.size(); i++)
- {
- used.push_back(0);
- }
- for (int i =0;i<sol.size();i++)
- {
- int poz = sol[i];
- int nr_fol = 0;
- for (int j = 0; j <= poz; j++)
- if (used[j] == 1) nr_fol++;
- poz += nr_fol;
- while (used[poz] == 1)
- poz++;
- perm.push_back(poz);
- used[poz] = 1;
- }
- for (int i = 0; i < sol.size() - 1; i++)
- val += costs[perm[i]][perm[i + 1]];
- return val;
- }
- double genetic(vector<vector <double> > &costs)
- {
- vector<vector<int> >pop;
- for (int i = 0; i < 100; i++)//100 indivizi
- {
- vector<int> rand_sol = get_random_sol(costs);
- pop.push_back(rand_sol);
- }
- for (int i = 0; i < pop.size(); i++)
- {
- print_vec(pop[i]);
- cout << " <- "<<get_sol_val(pop[i],costs)<<endl;
- }
- return 0;
- }
- int main()
- {
- vector <vector<double> > costs;
- set_up_costs(costs);
- int N = costs.size();
- cout << "matricea are " << N << " lin/col \n";
- for (int i = 0; i < costs.size(); i++)
- {
- for (int j = 0; j < costs[i].size(); j++)
- cout << costs[i][j] << " ";
- cout << endl;
- }
- cout << endl;
- genetic(costs);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement