﻿using System;
using eu.natcs.AbstractEvolutions.Util;

namespace eu.natcs.AbstractEvolutions
{
    /// <summary>
    /// 
    /// </summary>
    public interface IRobotEvolution : IComparable<IRobotEvolution>
    {
        
        int Fitness { get; }
        byte[] Genome { get; set; }
        string CompiledName { get; }
        string Name { get; }
        IPopulation Population { get; }
        string Save();
        BreedingRules GetBreedingRules();
        IRobotEvolution Breed(IRobotEvolution[] mates);
        string CompileRobot();
        IRobotEvolution Mutate(double MutationRate);
    }
}
