Как выбрать массив целых чисел в UPPAAL?

Я использую uppaal для класса, и я хотел бы создать массив целых чисел в пределах диапазона, используя оператор select.

Для фона я моделирую модифицированную игру ним с 3 игроками и 3 кучами, где игрок может либо взять до 3 спичек из одной кучи, либо выбрать такое же количество спичек из ВСЕХ куч (при условии, что достаточно во всех остались спички.)

Пока что у меня, по-видимому, работает (согласно некоторым базовым запросам к верификатору) ним-игра с 3 игроками, берущая матчи из одной кучи, но мне нужно расширить игроков, чтобы иметь возможность брать из всех куч, и я бы предпочел не для жестко заданных переменных, таких как heap1Taken, heap1TakenAmount, heap2Taken, heap2TakenAmount и т. д. :-)


person Xarn    schedule 25.11.2015    source источник


Ответы (1)


В итоге я создал массив int[0, MAX] beru[3]; и две функции, set_beru и beru_init.

void set_beru(int[0, MAX]& beru[3], int[0, 2] index, int[1, MAX] value){
    for (i : int[0, 2]){
        if (i == index){
            beru[i] = value;
        } else {
            beru[i] = 0;
        }
    }
}

void beru_init(int[0, MAX]& beru[3], int[1, MAX] init_value){
    for (i : int[0, 2]){
        beru[i] = init_value;
    }
}

Затем у игрока в игре есть два возможных перехода от ready_to_play к playing, один из которых выбирает индекс кучи и количество, затем вызывает set_beru, другой выбирает количество и вызывает beru_init. У обоих есть охрана, которая, конечно же, следит за тем, чтобы переезд был законным.

Когда игрок находится в состоянии playing, он сигнализирует по каналу, и игровое поле обновляет кучи, используя массив beru. Это позволяет игрокам играть по полному набору правил.

person Xarn    schedule 21.07.2016