Открытое API ГЭК
В ГЭК существуют два типа плагинов: плагины трофических стратегий и плагины стратегий синтеза. Плагины необходимо собрать как динамические библиотеки (*.dll под Windows, *.so под Linux). Чтобы создать собственные плагины, нужно разработать подклассы абстрактных классов Increaser (для трофических стратегий) и SynthesisStrategy (для стратегий синтеза).
Реализация новой трофической стратегии
Класс Increaser содержится в файле “Increaser.h”:
class Increaser {
public:
virtual double calculate(double curPopSize,
int nGNum,
int cGNum,
int dGNum,
const vector<float>& curMonoGenome,
const vector<int>& curMonoCodes,
const vector<double>& nSubstrates,
const vector<double>& sSubstrates,
float deathCoef, float flowCoef,
double totalPopSize) = 0;
};
Подкласс класса Increaser должен реализовывать метод calculate, определяющий новый размер мономорфной популяции. Для этой цели можно использовать следующие параметры:
- double curPopSize – размер текущей мономорфной популяции;
- int nGNum – количество генов утилизации неспецифических субстратов;
- int cGNum – количество генов утилизации специфических субстратов;
- int dGNum – количество генов синтеза специфических субстратов;
- const vector<float>& curMonoGenome – значения аллелей (константы скоростей) утилизации и синтеза, проиндексированные в следующем порядке: [0,nGNum-1] – скорости утилизации неспецифических субстратов, [nGNum,nGNum+cGNum-1] – скорости утилизации специфических субстратов, [nGNum+cGNum, nGNum+cGNum+dGNum-1] – скорости синтеза специфических субстратов;
- const vector<int>& curMonoCodes – индексы субстратов в соответствии с curMonoGenome;
- const vector<double>& nSubstrates – количества неспецифических субстратов (в молекулах), потребляемое всеми клетками популяции;
- const vector<double>& sSubstrates – количества специфических субстратов (в молекулах), потребляемое всеми клетками популяции;
- float deathCoef – коэффициент смертности;
- float flowCoef – коэффициент потока;
- double totalPopSize – размер всего сообщества;
Этот метод должен возвращать размер новой популяции (double).
Реализация новой стратении синтеза
Класс SynthesisStrategy находится в файле “SynthesisStrategy.h”:
class SynthesisStrategy {
public:
virtual void synthesize(_PolymorphPopulation* p) = 0;
};
Подкласс этого класса должен реализовывать метод synthesize, определяющий новые значения синтезированных специфических субстратов. Класс _PolymorphPopulation (содержащийся в файле “_PolymorphPopulation.h”) предоставляет функциональность для получения необходимой информации о популяции и для установки новых значений синтезированных субстратов:
class _PolymorphPopulation
{
public:
virtual ~_PolymorphPopulation(void){}
virtual std::vector<GeneticSpectrumVector> getProdSpecGenes() const = 0;
virtual std::vector<double> getSSCaptured() const = 0;
virtual std::vector<double> getNSCaptured() const = 0;
virtual double getMeanCellProductivity() const = 0;
virtual double getPopulationSize() const = 0;
virtual void setSynthesizedSubstrate (int subNum, double value) = 0;
};
Единственным нетривиальным типом данных здесь является класс GeneticSpectrumVector (содержащийся в файле “GeneticSpectrumVector.h”), который описывает распределение аллелей в популяции.
Создание плагинов ГЭК под Windows
Стратегии синтеза
1. Создание плагина новой стратегии синтеза в Visual Studio 2008:
2. Создайте новый проект (File->New->Project…)
3. Выберите “Win32 Console Application” и введите имя проекта, затем нажмите “OK”.
4. Нажмите “Application settings”.
5. Выберите application type “DLL” и нажмите “Finish”.
6. Поместите файл “SynthesisIncludes.h” и папку «SynthesisIncludes» в каталог проекта и добавьте этот заголовочный файл к проекту (щёлкните правой кнопкой мыши по “Header Files” -> Add -> Existing Item…).
7. Подключите этот заголовочный файл в файле <Project Name>.cpp.
8. Создайте свой собственный класс (например, SimpleSynthesisStrategy), унаследованный от класса SynthesisStrategy и реализующий метод synthesize.
9. Добавьте выходящую наружу функцию-фабрику, возвращающую объект вашей реализации абстрактного класса SynthesisStrategy:
extern «C» __declspec(dllexport) SynthesisStrategy* SynthesisStrategyFactory()
{
return new SimpleSynthesisStrategy();
}
10. Добавьте выходящую наружу функцию имени плагина, возвращающую уникальный строковый идентификатор вашего плагина:
extern «C» __declspec(dllexport) std::string PluginName()
{
return «MySimpleSynthesis»;
}
11. Соберите проект.
12. Поместите собранную dll в каталог “plugins/synthesis” в корне ГЭК.
13. Теперь вы можете использовать вашу стратегию в программе ГЭК.
Трофические стратегии
Создание плагина новой трофической стратегии в Visual Studio 2008 производится аналогично тому, как это делается для стратегий синтеза:
1. Создайте новый проект (File->New->Project…)
2. Выберите “Win32 Console Application” и введите имя проекта, затем нажмите “OK”.
3. Нажмите “Application settings”.
4. Выберите application type “DLL” и нажмите “Finish”.
5. Поместите файл “Increaser .h” в каталог проекта и добавьте его к проекту (щёлкните правой кнопкой мыши по “Header Files” -> Add -> Existing Item…).
6. Подключите этот заголовочный файл в файле <Project Name>.cpp.
7. Создайте ваш собственный класс (например, SimpleTrophicStrategy), наследующийся от класса Increaser и реализующий метод calculate.
8. Добавьте выходящую наружу функцию-фабрику, возвращающую объект вашей реализации абстрактного класса Increaser:
extern «C» __declspec(dllexport) Increaser* IncreaserFactory()
{
return new SimpleTrophicStrategy();
}
9. Добавьте выходящую наружу функцию имени плагина, возвращающую уникальный строковый идентификатор вашего плагина:
extern «C» __declspec(dllexport) std::string PluginName()
{
return «MySimpleTrophic»;
}
10. Соберите проект.
11. Поместите собранную dll в каталог “plugin/trophic” в корне ГЭК.
12. Теперь вы можете использовать вашу стратегию в программе ГЭК.
Создание плагинов ГЭК под Linux
Стратегии синтеза
Чтобы создать новый плагин стратегии синтеза, проделайте следующие шаги:
1. Поместите файл “SynthesisIncludes.h” и папку «SynthesisIncludes» в каталог проекта.
2. Подключите этот заголовочный файл в файле <Project Name>.cpp.
3. Создайте свой собственный класс (например, SimpleSynthesisStrategy), унаследованный от класса SynthesisStrategy и реализующий метод synthesize.
4. Добавьте выходящую наружу функцию-фабрику, возвращающую объект вашей реализации абстрактного класса SynthesisStrategy:
extern «C» SynthesisStrategy* SynthesisStrategyFactory();
SynthesisStrategy* SynthesisStrategyFactory()
{
return new SimpleSynthesisStrategy();
}
5. Добавьте выходящую наружу функцию имени плагина, возвращающую уникальный строковый идентификатор вашего плагина:
extern «C» std::string PluginName();
std::string PluginName()
{
return «MySimpleSynthesis»;
}
6. Создайте makefile следующего содержания:
all:
g++ <Project Name>.cpp -shared -o <Project Name>.so
7. Поместите собранную *.so в каталог “plugin/synthesis” в корне ГЭК.
8. Теперь вы можете использовать вашу стратегию в программе ГЭК.
Trophic
Чтобы создать новый плагин трофической стратегии, проделайте следующие шаги:
1. Поместите файл “Increaser.h” в каталог проекта.
2. Подключите этот заголовочный файл в файле <Project Name>.cpp.
3. Создайте свой собственный класс (например, SimpleTrophicStrategy), унаследованный от класса Increaser и реализующий метод calculate.
4. Добавьте выходящую наружу функцию-фабрику, возвращающую объект вашей реализации абстрактного класса Increaser:
extern «C» Increaser* IncreaserFactory();
Increaser* IncreaserFactory()
{
return new SimpleTrophicStrategy();
}
5. Добавьте выходящую наружу функцию имени плагина, возвращающую уникальный строковый идентификатор вашего плагина:
extern «C» std::string PluginName();
std::string PluginName()
{
return «MySimpleTrophic»;
}
6. Создайте makefile следующего содержания:
all:
g++ <Project Name>.cpp -shared -o <Project Name>.so
7. Поместите собранную *.so в каталог “plugin/trophic” в корне ГЭК.
8. Теперь вы можете использовать вашу стратегию в программе ГЭК.