Какие есть варианты решения данной задачи(которые сам придумал и случайным образ усложнил)?

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

и так вот... Мне нужно так чтобы где указывается люди это было не просто кол-во но и как люди то есть объекты то есть... Например есть население 1000 чел интенсивность болезни 2 то есть каждый день -2 чел и получается что в 1 день был 1 зараженный а во второй стало 3 и так можно было просто с с герметической прогрессии могли заражаться то есть... в 4 день бы стало не 3 ,а 9 но это слишком просто... Надо сделать так что бы ,что это происходило не просто как простое действие умножение то есть... например человек №1 заразил как и согласно интенсивности 2 чела а вот например чел №3 не кого не заразил ,а чел №6 вообще вылечился и т.д (Если есть непонятные моменты в вопросе пишите я уточню).
  • Вопрос задан
  • 419 просмотров
Пригласить эксперта
Ответы на вопрос 5
@red-barbarian
у каждого человека есть состояния - носитель, больной, здоровый.
вероятность заболевания зависит от количества контактов с носителями. и некого коэффициента передачи инфекции.
Больной становиться здоровым через средний период (длительность болезни) по нормальному распределению.
Ну примерно такова предметная область.

остальное моделирование.
ссылка на https://ru.wikipedia.org/wiki/%D0%9D%D0%BE%D1%80%D...
Как-то сам моделировал такое. Весной. Пора инфекций. )))
Ответ написан
sergiks
@sergiks Куратор тега Алгоритмы
♬♬
Вы хотите построить упрощённую модель распространения заболевания? Чтобы что получить на выходе – число больных по дням, визуализировать как-то процесс? Я представил себе два разных подхода:

1. брать исходную «конфигурацию» социума, этих 1000 человек – как граф их связей, через которые происходит заражение. Генерировать этот граф случайным образом. Выбирать исходного заражённого. И далее обходить граф по каким-то правилам. Можно ещё добавить вероятность передачи заражения, чтобы случайным образом определять на каждом звене – состоялась передача в этот день или нет. Усложнить можно, разбив людей на классы. Например, для ИППП как минимум, мужчины/женщины и только гетеросексуальная передача. Или для инфекций, передающихся бытовым путём рассмотреть распространение от работника заведения массового питания.

2. без графа, просто добавить вероятности заражения от каждого каждому. Можно все сделать одинаковыми, напр., 60%. И каждую передачу в каждый день пробрасывать через генерацию очередного случайного числа – состоялась или нет.

Ну и погуглите научные исследования распространения эпидемий (например), или визуализации / игры на эту тему.
Ответ написан
Комментировать
@koronabora
Человек
Простая реализация:

Всех людей отнести к 3 категориям: заразившиеся, переболевшие, не болевшие. Далее, в цикле, проходя всех людей, переводить людей из одной категории в другую, в соответствии с некой вероятностью заразить не болевших у каждого заболевшего. У каждого человека будут данные по дате его заражения, от нее будем считать когда он вылечится на каждом шаге. Все.
Ответ написан
Комментировать
@Xander017
Если совсем не усложнять все
import random

population = 1000

while population > 0:
    dead = random.randint(1,7)
    sick = random.randint(1,10)
    heal = random.randint(1,5)
    run = random.randint(1,5)
    day = (sick+dead-heal-run)
    print(population)
    population = population - day
Ответ написан
Комментировать
georgey1999
@georgey1999 Автор вопроса
...
Вот что на данный момент есть)) Ну что бы понимали о чем тут у меня)

import random

# Цикла все программы.
i = 0
while i < 2:
    
    def example_f():  # Для красоты.(Особо не на что не влияет)
        random.randint(1, 10000000)

    input_validation = 0
    check = 1
    while input_validation < 2:  # Цыкал проверки ввода.
        if check == 1:
            try:
                check -= 1
                people = int(input("\nВведите начальное кол - во людей: "))
            except ValueError:
                check += 1
                print("\nНекорректный ввод, попробуйте ввести например: ", example_f())

    check = 1
    while input_validation < 2:  # Цыкал проверки ввода.
        if check == 1:
            try:
                check -= 1
                distribution = int(input("Введите интенсивность болезни: "))
            except ValueError:
                check += 1
                print("\nНекорректный ввод, попробуйте ввести например: ", example_f())

        elif check == 0:
            break

    infected = 1  # Кол-во инфицированных людей.

    j = 0
    days = 0
    people_copy = people
    infected_copy = infected
    # Идет расчет сколько будет выделено примерно дней для лечения.
    while j < 2: 
        infected_copy += distribution
        people_copy = people_copy - infected_copy
        days += 1
        if people_copy <= 0:
            j += 3
        else:
            pass

    input("\nНажмите Enter ,чтобы посмотреть введенные данные...")

    print("\n" * 20)

    print("\nВсего жителей: ", people)
    print("Интенсивность болезни: ", distribution)
    print("Зараженных жителей: ", infected)
    print("Примерно дней на лечении болезни: ", days)

    input("Нажмите Enter ,чтобы начать игру...")

    print("\n" * 20)

    schet_deys = 0  # Счетчик: сколько прошло дней
    j = 0
    while j < 2:

        if schet_deys < days:

            schet_deys += 1
            print("\nПрошло дней", schet_deys)

            infect = random.randint(1, 3)  # Вероятность заражения.

            if infect == 1 or infect == 3:  # В этом случаи происходит заражение.
                people -= distribution
                print("\nОсталось людей ", people)

                input("\nследующий день...")

            elif infect == 2:  # В этом случае не происходит заражения.
                print("\nЛюдей осталось ", people)
                input("\nследующий день...")

        else:
            break
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
25 нояб. 2024, в 18:39
30000 руб./за проект
25 нояб. 2024, в 18:35
30000 руб./за проект
25 нояб. 2024, в 18:33
10000 руб./за проект