Форум программистов, компьютерный форум, киберфорум
alhaos
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  

Модель заражения группы наркоманов

Запись от alhaos размещена 17.04.2026 в 15:33
Показов 5772 Комментарии 0

Условия задачи сформулированы тут

Суть:
- Группа наркоманов из 10 человек.
- Только один инфицирован ВИЧ.
- Колются одной иглой.
- Колются раз в день.
- Колются последовательно через минимальный промежуток времени.
- После инфицированного наркомана игла становится грязной.
- Укол грязной иглой вызывает заражение в 2% случаях.
- За ночь игла становится чистой.

Интересует сколько в среднем дней нужно чтобы заразилась вся группа.

смоделировал Так

Go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
// Наркоман
type Junkie struct {
    ID       int
    Infected bool
}
 
// Эксперимент
type Trial struct {
    Junkies []Junkie
}
 
func NewDefaultTrial() *Trial {
 
    t := Trial{}
 
    t.Junkies = append(t.Junkies, Junkie{Infected: true, ID: 0})
 
    for i := range 9 {
        t.Junkies = append(t.Junkies, Junkie{Infected: false, ID: i + 1})
    }
 
    return &t
}
 
func (t *Trial) ShootUpJunkies() {
 
    rand.Shuffle(len(t.Junkies), func(i, j int) {
        t.Junkies[i], t.Junkies[j] = t.Junkies[j], t.Junkies[i]
    })
 
    isNeedleInfected := false
 
    for i, junkie := range t.Junkies {
 
        if junkie.Infected {
            isNeedleInfected = true
        }
 
        if isNeedleInfected {
            t.Junkies[i].Infected = t.Junkies[i].Infected || (rand.Intn(100) < 2)
        }
    }
}
 
func (t *Trial) IsAllInfected() bool {
 
    var result bool
 
    result = true
 
    for _, j := range t.Junkies {
        result = result && j.Infected
    }
 
    return result
}
Один миллион экспериментов показал что в среднем надо 167 дней

Go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package main
 
import (
    "fmt"
 
    "github.com/alhaos/junkiesInection/internal/model"
)
 
const count = 1_000_000
 
func main() {
 
    var sum int
 
    for _ = range count {
        t := model.NewDefaultTrial()
        i := 0
        for ; !t.IsAllInfected(); i++ {
            t.ShootUpJunkies()
        }
        sum += i
    }
 
    fmt.Printf("avg days: %d", sum/count)
}
avg days: 167
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 0
Комментарии
 
Новые блоги и статьи
Транскрипция 55-минутного видео через Whisper: WhisperDesktop облажался, спас Google Colab[
anaschu 01.06.2026
Понадобилось получить текст из свежезагруженного видео на YouTube. Казалось бы, задача на пять минут. Заняла полтора часа. Делюсь опытом — может кому пригодится последовательность решений. . . .
21 мат мед. Планы на развитие модели здравоСохранения
anaschu 01.06.2026
AnyLogic: план развития симуляционной модели рабочего коллектива — динамический абсентеизм, реальные данные, три сценария сравнения Продолжаю серию постов о дискретно-событийной модели рабочего. . .
20. Мат мед. Абсентеизм как отдельный тип простоя
anaschu 29.05.2026
Апдейт модели: исправленные баги, абсентеизм и новые механизмы Продолжаю развивать ранее описанную модель рабочего коллектива на AnyLogic. За последние несколько дней был проведён серьёзный. . .
19. здоровье, усталость и психотип работника влияют на производительность предприятия, и наоборот, производительность на здоровье, усталось и психотип
anaschu 28.05.2026
Дискретно-событийная модель рабочего коллектива на AnyLogic: здоровье, выгорание, психотипы и микростимуляция Привет, коллеги. Хочу поделиться итогами нескольких недель работы над симуляционной. . .
"Прокси" для последовательного порта
Eddy_Em 28.05.2026
Эту штуку написал я достаточно давно. Но сейчас вот понадобилось настроить датчик грозы, но при этом не отключать его от "метеодемона". Соответственно, надо запустить этот "прокси": метеодемон будет. . .
Рефакторинг программы уравнивания.
Massaraksh7 26.05.2026
Пример по предыдущей записи в блоге. Но, надо заметить, что, во-первых, там оптимизация не только математики, но и работы с базой данных, и с графами, а во-вторых, это ещё не всё.
Использование TThread в Lazarus для математических вычислений.
Massaraksh7 25.05.2026
Производя рефакторинг своих программ на предмет ускорения их работы, обратил внимание на такой аспект, как сокращение времени матвычислений. Дело в том, что приходится работать с большими матрицами. . .
Модель здравосохранения 18. Чем здоровее работник, тем быстрее выгорает
anaschu 24.05.2026
Имитационная модель корпоративного здравоохранения: что показывает математика Сегодня в модели рабочего коллектива на AnyLogic появились три новые механики — выгорание через накопленную усталость,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru