Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.05.2018, 23:21   #1
DchE
Новичок
Джуниор
 
Регистрация: 30.05.2018
Сообщений: 3
Восклицание Перевод с C++ на C#

Доброго времени суток.
Помогите пожалуйста перевести код, приложенный ниже, с C++ на C#. Очень нужна Ваша помощь, буду Вам благодарен.

Код:
#ifndef Genetic_T_h
#define Genetic_T_h
template <typename T, typename TF, typename F>
class chromosome {
protected:
    T genes; 
    TF fitness; 
public:
    static F fit_fun;
    virtual chromosome& operator=(const chromosome& c) 
    {
        genes = c.genes;
        fitness = c.fitness;
        return *this;
    }
    T get_genes() const { return genes; }
    TF get_fitness() const { return fitness; }
};
template <typename T, typename TF, typename F>
F chromosome<T, TF, F>::fit_fun;
template <typename T, typename TF, typename F>
bool operator==(const chromosome<T, TF, F>& c1, const chromosome<T, TF, F>& c2) 
{
    return c1.get_genes() == c2.get_genes();
}
template <typename T, typename TF, typename F>
bool operator<(const chromosome<T, TF, F>& c1, const chromosome<T, TF, F>& c2) 
{
    return c1.get_fitness() < c2.get_fitness();
}
template <typename T, typename TF, typename F>
bool operator>(const chromosome<T, TF, F>& c1, const chromosome<T, TF, F>& c2) 
{
    return c1.get_fitness() > c2.get_fitness();
}
 
template <typename C>
class population {
protected:
    using compare = bool(*)(const C&, const C&);
    vector<C> pop;
    int n = 0; 
    compare cmp = [](const C& c1, const C& c2) 
    { 
        return c1 < c2; 
    };
public:
    void insert(const C& c);
    C operator[](int i) 
    { 
        return pop[i]; 
    }
    int size() 
    { 
        return n; 
    }
    vector<double> get_freq();
};
 
template <typename C>
void population<C>::insert(const C& c) {
    pop.push_back(c); n++;
    auto i = pop.end(); i--;
    inplace_merge(pop.begin(), i, pop.end(), cmp); 
}
 
template <typename C>
vector<double> population<C>::get_freq() {
    vector<double> frec;
    double z, z_max = 1.01 * pop.back().get_fitness();
    for (auto x : pop) {
        z = x.get_fitness();
        if (pop.back() > pop.front()) frec.push_back(z_max - z);
        else frec.push_back(z);
    }
    return frec;
};
#endif /* Genetic_T_h */
Не хочу показаться наглым, но этот код тоже не понятен, а мне очень нужно разобраться в нём.
(chromosome_p и Fitness - классы, SLO - возвращающая double функция)

Код:
class population_p : public population<chromosome_p> 
{
    map<string, int> CROSS{ { "PMX", 0 },{ "OX", 1 },{ "CX", 2 },{ "POX", 3 },{ "PCX", 4 } };
    int n_cross = 0;
public:
    static const double P_CROSS_p;
    static const double P_MUT_p;
    static const double ELITE_p;
    population_p(string cr = "PMX") : n_cross(CROSS[cr]) {}
    population_p(compare c, string cr = "PMX") : n_cross(CROSS[cr])
    {
        cmp = c;
    }
    void next_pop(Tables*);
};
 
class GA_permut 
{
    using F_p = double(*)(Tables*, vector<int>&);
    population_p pop;
public:
    static const int N_pop_p;
    static const int ITER_p;
    GA_permut(string, F_p = Fitness::SLO);
    void GA_perm(Tables*);
};
DchE вне форума Ответить с цитированием
Старый 30.05.2018, 23:22   #2
DchE
Новичок
Джуниор
 
Регистрация: 30.05.2018
Сообщений: 3
По умолчанию

Всё что пока смог сообразить, остальное не могу понять

Код:
class chromosome <T,TF,F>
    {
        protected T genes;
        protected TF fitness;
 
        public static F fit_fun;
 
 
    }
 
    class population <C>
    {
        protected List<C> pop;
        int n = 0;// размер популяции
 
    }
и по второму

Код:
class GA_permut
    {
        //using Func<double, Tables, List<int>> F_p;
        public static int N_pop_p;
        public static int ITER_p;
        public double AAA;
 
        public GA_permut (string a, Func<double, Tables, List<int>> F_p = Fitness.SLO)//тут ошибка
        {
 
        }
 
        public void GA_perm(Tables t)
        {
            
        }
    }
DchE вне форума Ответить с цитированием
Старый 30.05.2018, 23:25   #3
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

Было бы лучше, если бы Вы обрисовали задачу, которую решает этот код
Black Fregat вне форума Ответить с цитированием
Старый 30.05.2018, 23:32   #4
DchE
Новичок
Джуниор
 
Регистрация: 30.05.2018
Сообщений: 3
По умолчанию

Цитата:
Сообщение от Black Fregat Посмотреть сообщение
Было бы лучше, если бы Вы обрисовали задачу, которую решает этот код
Это довольно проблематично сделать, но если кратко, то это часть кода, в котором определяется хромосома и популяция, для генетического алгоритма.
DchE вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
перевод из 2-ой СС в 8-ю СС tomas88 C# (си шарп) 6 29.05.2014 08:36
перевод на c# Гузель23 C# (си шарп) 8 23.04.2013 16:44
Перевод на Си istavzev Помощь студентам 1 23.05.2012 21:04
Перевод с С++ Vovchik123 C# (си шарп) 0 15.11.2011 23:50
перевод KostyaS Общие вопросы C/C++ 0 05.01.2011 14:52