Логические функции для случайной логической сети - PullRequest
0 голосов
/ 01 апреля 2019

Я разрабатываю очень простую случайную логическую сеть.

RBN состоит из N узлов, которые могут принимать значения от нуля до единицы (логическое значение).Состояние (ноль или один) каждого узла определяется K соединениями, поступающими из других (или одинаковых) узлов.Соединения подключаются случайным образом, но остаются фиксированными во время динамики сети, то есть «гасятся».Способ, которым узлы влияют друг на друга, определяется не только их соединениями, но и логическими функциями, которые генерируются случайным образом, просто используя таблицы поиска для каждого узла, которые принимают состояния соединительных узлов в качестве входных данных, и состояниеузел в качестве вывода.Они также остаются фиксированными (закаленными) во время динамики сети.

У нас была идея кодировать логические функции для каждого соединения.Разработал двоичное дерево для каждого узла, прочитал все соединения и случайным образом корень выбрал, какой из них использовать (NOR, XOR, AND ... и т. Д.).

У меня возникла проблема с кодированием этого фрагмента, потому что я не могуПосмотрите, как добавить эти узлы.Я думал о подсчете всех де 1 и добавлении в дерево.

Я сделал эту Матрицу:

Matrix(int vertex_num){
            srand(5);
            this->vertex_num = vertex_num;
            adjMatrix = new int*[vertex_num];
            /*QVector<QVector<int>> testMatrix;*/
            for (int i = 0; i < vertex_num; i++){
                adjMatrix[i] = new int[vertex_num];
                for (int j = 0; j < vertex_num; j++){
                    adjMatrix[i][j] = rand()%2;
                }
            }
       }

, а также базовую структуру дерева:

    Node* insert(Matrix *m){
    root = new Node();
    for (int i=0; i< m->v_size(); i++){
         for (int j=0; j< m->v_size(); j++){
             if (m->adjMatrix[i][j] == 1){
                 if(root->left == NULL){
                     root->left = new Node(m->adjMatrix[i][j]);
                 }
                else{
                     root->right = new Node(m->adjMatrix[i][j]);
                 }                         
             }
         }

Я хотел бы получить эти соединения, определить случайную функцию и вернуть 0 или 1 после проверки всех соединений.

...