Открытое 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, определяющий новый размер мономорфной популяции. Для этой цели можно использовать следующие параметры:

  1. double curPopSizeразмер текущей мономорфной популяции;
  2. int nGNumколичество генов утилизации неспецифических субстратов;
  3. int cGNum количество генов утилизации специфических субстратов;
  4. int dGNumколичество генов синтеза специфических субстратов;
  5. const vector<float>& curMonoGenomeзначения аллелей (константы скоростей) утилизации и синтеза, проиндексированные в следующем порядке: [0,nGNum-1]скорости утилизации неспецифических субстратов, [nGNum,nGNum+cGNum-1]скорости утилизации специфических субстратов, [nGNum+cGNum, nGNum+cGNum+dGNum-1]скорости синтеза специфических субстратов;
  6. const vector<int>& curMonoCodesиндексы субстратов в соответствии с curMonoGenome;
  7. const vector<double>& nSubstrates количества неспецифических субстратов (в молекулах), потребляемое всеми клетками популяции;
  8. const vector<double>& sSubstratesколичества специфических субстратов (в молекулах), потребляемое всеми клетками популяции;
  9. float deathCoefкоэффициент смертности;
  10. float flowCoefкоэффициент потока;
  11. 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…)

иллюстрация1

3. Выберите “Win32 Console Application” и введите имя проекта, затем нажмите “OK”.

иллюстрация2

4. Нажмите “Application settings”.

иллюстрация3

5. Выберите application type “DLL” и нажмите “Finish”.

иллюстрация4

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. Теперь вы можете использовать вашу стратегию в программе ГЭК.

headers_for_plugins