Ответы Mail.ru: Как обучить нейронку для такого случая? Задачка с лифтом.

Как обучить нейронку для такого случая? Задачка с лифтом.

Есть 100 этажей. По ним как-то разбросаны 1000 человек. Каждый "такт" каждый из обиталей здания может решить, что он хочет на какой-то другой этаж. Все такие люди в этот "такт" вызывают лифт. Лифт на каждый "такт" можем сместиться на один этаж. О том, куда люди хотят ехать, лифт узнает только тогда, когда люди в него зайдут (заход тоже тратит один "такт"). Задача: написать мозг для этого лифта в виде нейронки. На входе всегда будет текущий этаж, номера этажей, где ожидают лифт, и номера этажей, куда хотят добраться люди, уже, сидящие внутри. На выходе нейронка должна говорить, куда ехать лифту. Нужно минимизировать среднее время ожидания людей (люди внутри лифта тоже считаются ожидающими).

Ответы

Лифты работают на обычной релейной логике. Нельзя использовать ИИ с его вероятностным подходом ко всему в подобных устройствах. Еще такой момент: если кому-то нужно на очень "непопулярный" этаж, он будет кататься в лифте бесконечно, пока твой лифт минимизирует время ожидания для толп остальных пользователей. Боюсь, что этот чувак может немножко обидиться и начать искать разработчика столь удобной и высокоинтеллектуальной системы, чтобы объяснить ему неправоту подобного подхода. А еще твой лифт не соблюдает шаббат, такие дела...

1 месяц

Эт все не важно, я ж не собираюсь совать это в реальный лифт. Да и модель тут не совсем вероятностная. Мне интересны возможные подходы к решению.

1 месяц

> Да и модель тут не совсем вероятностная. А какая еще? ИИ - это возможность вычислительного устройства делать выводы на основе неявных и/или неполных данных. Т. е. если ты его обучишь на абсолютно все случаи жизни, это будет уже не ИИ, а обычная программа с базой данных тех самых случаев. А если не на все, то всегда есть вероятность получить крайне экзотическое решение.

1 месяц

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

1 месяц

Тогда обычную сеть обычным back-propagation можно обучить. Чем больше примеров ты ей дашь, тем лучше (в среднем) будет конечный результат. Но необязательно каждый конкретный случай будет хорошим, ибо смотри выше.

1 месяц

Как обратное распространение применить без известного ответа?

Это интересная задача! Для решения этой задачи можно использовать подход обучения с подкреплением (Reinforcement Learning, RL). Ваша нейронная сеть будет “агентом”, который принимает решения о том, куда двигаться дальше. Вот примерный план действий: Определите состояние и действия: Состояние может быть определено как текущий этаж лифта, этажи, где люди ожидают лифта, и этажи, куда хотят добраться люди внутри лифта. Действиями могут быть “ехать вверх”, “ехать вниз” или “остаться на месте”. Определите награду: Награда (или штраф) может быть основана на среднем времени ожидания людей. Например, вы можете установить отрицательную награду, которая увеличивается с увеличением времени ожидания. Выберите архитектуру сети: Вы можете начать с простой полносвязной нейронной сети (Fully Connected Neural Network) или использовать более сложные архитектуры, такие как LSTM, если вам нужно учитывать временные зависимости. Обучите вашу модель: Используйте алгоритм обучения с подкреплением, такой как Q-Learning или Deep Q-Network (DQN), чтобы обучить вашу модель. В процессе обучения ваш агент будет исследовать и эксплуатировать свою среду, чтобы максимизировать награду. Тестируйте и оптимизируйте: После обучения модели протестируйте ее, чтобы убедиться, что она работает как ожидалось. Вы можете продолжить оптимизацию вашей модели, меняя параметры обучения или архитектуру сети. Вот пример кода, который может помочь вам начать:

 import numpy as np 
import tensorflow as tf 
from tensorflow.keras.models import Sequential 
from tensorflow.keras.layers import Dense 
 
# Определите состояние и действия 
num_floors = 100 
num_people = 1000 
state_size = num_floors * 2  # текущий этаж + этажи ожидающих и внутри лифта 
action_size = 3  # вверх, вниз, остаться на месте 
 
# Создайте модель 
model = Sequential() 
model.add(Dense(24, input_dim=state_size, activation='relu')) 
model.add(Dense(24, activation='relu')) 
model.add(Dense(action_size, activation='linear')) 
model.compile(loss='mse', optimizer=tf.keras.optimizers.Adam()) 
 
# Определите функцию для выбора действия 
def choose_action(state, epsilon): 
    if np.random.rand() <= epsilon: 
        return random.randrange(action_size) 
    else: 
        return np.argmax(model.predict(state)) 
 
# Определите функцию для обучения модели 
def train_model(state, action, reward, next_state, done): 
    target = model.predict(state) 
    if done: 
        target[0][action] = reward 
    else: 
        target[0][action] = reward + discount_factor * np.amax(model.predict(next_state)) 
    model.fit(state, target, epochs=1, verbose=0) 
 

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

это кстати знаешь что за задача, это на обучение с подкреплением ф arxiv .org/abs/1802.04240 там чтото вроде строится сетка всех переходов и агент учится минимизировать время, классическая задача : грузовик каждый ход получает груз но думает доставить его сразу ждать побольше грузов чтобы сразу все доставить

1 месяц

Спасябствую, гляну попозжее.

В чем проблема загуглить инструкцию, записать, и применить в нейросети? Если вы дошли до мэил ру, то с таким уже несколько лет как проблем быть не должно.

1 месяц

Проблема в том, что быстрый поиск не дал нужных результатов. Поэтому перед долгим поиском неплохо закинуть удочку, вдруг кто-то ответит быстрее, чем я найду. Но я уже нашел, да и тут тоже подсказали.

в инс всегда присутствует элемент "чёрного ящика", а алгоритм работы лифта заранее расписан и в нём нет неопределённости работы. Она предсказуема и ситуаций мало. Более того, эти ситуации просто обязаны быть простыми и понятными и не иметь двусмысленности. Др. словами, использование инс для данного случая не применима.

2 недели

Применима, конечно, и еще как. Просто надо выкинуть алгоритм работы лифта и заменить черным ящиком.

2 недели

Amaxar 777, и кто будет отвечать за возможные жертвы - этот ящик? Кто такое разрешит будет первым на расстрел

2 недели

Какие жертвы... это чисто абстрактная задачка для развлечения. Никто не пойдет вставлять ее в реальный лифт.

2 недели

Amaxar 777, бред какой-то. Извините, что встрял. Предпочитаю заниматься практическими задачами