2015-04-14 2 views
0

Я пытаюсь реализовать концепцию аукциона в netlogo - она ​​похожа на программу dining philosophers problem.Реализация аукциона аналогична столовой Философы

В моей программе рассматриваются компьютеры и процессоры, которые соответствуют философам и вилкам в программе обеденного философа. В программе философов пользователю требуется 2 вилки, но в компьютерах и процессорах для одного компьютера требуется один процессор.

Состояния, определенные в моей программе IDLE, NEED, USING, что соответствует THINKING, HUNGRY, EATING в программе философа.

В настоящее время моя программа переходит к пункту, в котором все компьютеры сообщают об изменениях NEED. У меня возникают проблемы с приобретением сервера для компьютеров.

Фрагмент кода -

// ... lines of code for declaration etc 
    . 
    . 
    . 
    to update 
    if state = "IDLE" [ 
    if random-float 1.0 < hungry-chance [ 
    set state "NEED" 
    ] 
    stop 
    ] 
    if state = "USING" [ 

    set total-used (total-used + 1) 
    if random-float 1.0 < full-chance 

    [ release-servers ] 

    set state "IDLE" 
    stop 
    ] 
    if state = "NEED" 

    [ acquire-servers ] 
     if we've got both forks, eat. 
     if got? servers 
    [ set state "USING" ] 
    stop 

end 
//lines of code in between 
. 
. 

    to acquire-servers ;; philosopher procedure 
    ask servers [ 
    if [owner] of servers = nobody[ 
    set owner myself 
    move-to owner 
    set heading [heading] of owner 

    ] 
    ] 
end 
// lines of code at end 
+0

Добро пожаловать в переполнение стека! Я немного изменил ваш вопрос, чтобы сделать его немного легче читать. Я немного смущен, как ваша проблема связана с обеденными философами. Эта проблема специально связана с тем, что один пользователь нуждается в 2 ресурсах и имеет возможность «блокировать», если у каждого есть один ресурс, но никто не может заставить их «разблокировать» ситуацию. Это соответствовало бы всем в состоянии «НУЖНО», а затем вы пытаетесь предотвратить такую ​​блокировку. Но для вашей ситуации (1 ресурс для 1 компьютера) я не понимаю, как помогают стратегии столового философа. Вы можете уточнить? –

+0

В моей программе количество процессоров всегда будет меньше количества компьютеров. Я не рассматриваю дела о сотрудничестве здесь. Эта программа проще для начинающего философа. Мне просто нужны способы распределения процессора на компьютере, а когда компьютер завершен, он освобождает процессор, чтобы он мог быть назначен другому компьютеру. Можете ли вы помочь в реализации этого? Как я уже говорил в своем сообщении, в настоящее время программа идет до того момента, когда компьютеры находятся в состоянии нужды. –

+0

@RichardSnape не могли бы вы помочь –

ответ

0

Во-первых, вам нужно изменить if для тестирования состояния в ifelse и удалить stop команды. Таким образом, компьютер найдет свое правильное состояние и выполнит соответствующие процедуры, а затем не будет смотреть на другие состояния.

Во-вторых, процедура получения серверов в настоящее время назначает все серверы первому компьютеру, который нуждается в ней. Вероятно, вам нужна процедура, которая больше похожа:

to acquire-one-server 
    let candidates servers with [ owner = nobody ] 
    if any? candidates 
    [ ask one-of candidates 
    [ set owner myself 
     move-to owner 
     set heading [heading] of owner 
    ] 
    ] 
end 
Смежные вопросы