Американский психолог Джой Пол Гилфорд, известный исследователь проблем интеллекта, в свое время предложил понятие дивергентного мышления. Сам Гилфорд определял его, как тип мышления идущий в различных направлениях. Ищем все возможные способы решения одной проблемы. Выходим за рамки стереотипов и, как результат, находим неожиданные и суперэффективные методы. Дивергентное мышление ассоциируется с креативностью. Яркий пример такого мышления можно увидеть в хорошо известной истории про Нильса Бора и барометр.

До появления генеративных языковых моделей было распространено мнение, что искусственный интеллект, когда и если будет создан, будет уступать человеку в креативности. Будет действовать скрупулезно, последовательно, без ошибок, но шаблонно. Оказалось — наоборот. Как это выглядит в реальности, при решении «скучных» учетных задач в 1С, смотрите ниже.

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

Как определить день, когда в отеле было максимальное количество постояльцев?
В общем, есть задача, её суть:

Учет приезда клиентов ведется со дня старта работы отеля (к примеру день приезда 3, означает что клиент приехал в третий день работы отеля, а уехал на 8 день работы отеля т.д.).

Нужно написать программу, которая сама бы определила этот день (при этом нельзя использовать сторонние объекты в виде регистров, справочников и т.д.). Есть документ с расписанием отъездов и выездов, нужно отталкиваться только от него.
Если таких дней несколько — вывести первый.

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



Ответ:

SELECT day
FROM (
    SELECT arrival_day AS day
    FROM bookings
    UNION ALL
    SELECT departure_day + 1
    FROM bookings
) AS days
GROUP BY day
ORDER BY COUNT(*) DESC, day
LIMIT 1

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

Текст вопроса:
Это отель. Вычислить день, когда было больше всего живущих в отеле

Схема:

MySQL #
Размещение(постоялец, день_заезда, день_отъезда) #

Ответ:

SELECT DATE, COUNT(*) AS NumberOfGuests
FROM
(
    SELECT a.Date
    FROM
    (
        SELECT день_заезда AS Date
        FROM Размещение
        UNION ALL
        SELECT день_отъезда
        FROM Размещение
    ) a
    WHERE a.Date BETWEEN (SELECT MIN(день_заезда) FROM Размещение) AND (SELECT MAX(день_отъезда) FROM Размещение)
) b
LEFT JOIN Размещение c ON b.Date BETWEEN c.день_заезда AND c.день_отъезда
GROUP BY DATE
ORDER BY NumberOfGuests DESC
LIMIT 1



Не помогло. Оно упорно пытается действовать через UNION. Видно, что идет поиск решения через усложнение, но… нет. Ну что ж, еще одна попытка. Просто чуть конкретизируем вопрос.

Текст вопроса:

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

Ответ:

SELECT MAX(day_count) AS max_guests, day
FROM (
  SELECT COUNT(*) AS day_count, day
  FROM (
    SELECT a.day
    FROM (
      SELECT ADDDATE('1970-01-01', t4.i*10000 + t3.i*1000 + t2.i*100 + t1.i*10 + t0.i) day
      FROM
        (SELECT 0 i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) t0,
        (SELECT 0 i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) t1,
        (SELECT 0 i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) t2,
        (SELECT 0 i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) t3,
        (SELECT 0 i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) t4
    ) a
    JOIN Размещение b
    ON a.day >= b.день_заезда AND a.day <= b.день_отъезда
  ) c
  GROUP BY day
) d
ORDER BY day_count DESC
LIMIT 1



И вот оно! Работающее решение, использующее генератор дней.

Поясню, что я вижу в этом заслуживающего вашего внимания. Я много лет обучал взрослых и детей программированию. И я знаю, что если человек встал на какие-то «рельсы», то снять его с них зачастую очень и очень сложно. А оно (я имею ввиду большую языковую модель) хоть и тупенькое, но креативное! Заставить его найти другое решение совсем не сложно. И это очень важный момент.

Кстати, в том же обсуждении, где была поставлена эта задача, человеком было предложено следующее решение:
Соединяем в запросе выборки из табличных частей.
1 Дата (ДатаПриезда)
Объединить
-1 Дата(ДатаОтъезда)
Группируем по дате.
Полученную таблицу соединяем саму с собой по условию Дата<=Дата, делаем группировку по дате.

Как видите, решение через UNION тоже существует. Надо только складывать приезды и вычитать отъезды. Но метод предложенный большой языковой моделью лучше, потому что он универсальный. Можно не только определить день максимальной загрузки отеля, но и период, когда эта загрузка сохранялась. Можно получить все периоды с максимальной нагрузкой. Вычислить процент
Что из всего этого следует. На мой взгляд, очень хорошие новости. Сейчас много разговоров о том, что искусственный интеллект лишит работы тех или этих. Лишит или нет, это мы еще посмотрим. Лично я считаю, что тут опасения сильно преувеличены. Гораздо меньше разговоров со знаком «плюс». Разговоров о том, что нам даст искусственный интеллект. А даст он нам то, что, как я вижу, мы все станем более креативными. Дивергентный и конвергентный типы мышления не антагонисты. Напротив, они естественным образом дополняют друг друга. Обратите внимание на мои действия в описанном мною примере. Я действую вполне конвергентно. Просто улучшаю шаг за шагом свой вопрос. А мой второй пилот дополняет меня. Ищет и находит всевозможные варианты решения. И это, как я считаю, самое важное свойство генеративных моделей искусственного интеллекта.

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

Комментарии (12)


  1. MaximRV
    14.04.2024 15:37
    +4

    1С тут явно притянуто. Что задача, что решение безотносительно 1С. С таким же успехом можно было упомянуть QuickBooks.


    1. exwill Автор
      14.04.2024 15:37

      Вы где-нибудь видели QuickBooks copilot или QuickBooks запрос copilot?


      1. MaximRV
        14.04.2024 15:37
        +1

        пытаюсь понять ваш ответ, но никак не осилю, Расшифруйте пожалуйста, где вы встречали указанные вами сочетания copilot с упомянутой вами 1С. В вашей же статье лишь mySQL Не прослеживается прикладное назначение к 1С.
        Я же имел ввиду. Что многие предприятия в задачах своей автоматизации на какой-бы то ни было платформе автоматизации сталкиваются с описанными вами задачами про поиск каких-бы то ни было данных, в т.ч. дней.


        1. exwill Автор
          14.04.2024 15:37

          Набираете в Google или в Яндекс "1С запрос copilot"


          1. MaximRV
            14.04.2024 15:37

            ну нормально чо. на инфостарте ваши же решенич за 5-10 стартмани. А здесь получается - статья "затравочка", чтобы привлечь. Ну тогда надо чётче в статье излагать суть и чаще упоминать 1с, да и запросы транслировать из mySQL в 1С более явно - ну примерно как у вас там на инфостарте.
            Вы не переживайте у меня там тоже есть аккаунт, и разработки я там тоже размещаю.
            Если что, минусить я не могу, не хватает, да и не собирался.
            Извините.


          1. MaximRV
            14.04.2024 15:37

            впрочем и в яндексе поиск ведёт только к вам.


  1. jimquery
    14.04.2024 15:37

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


    1. exwill Автор
      14.04.2024 15:37
      +2

      Вот ведь бывает!

      Задача формулировалась так:

      "Как найти день, когда в отеле было максимальное количество клиентов?"

      Спасибо, что заметили! Исправил


      1. jimquery
        14.04.2024 15:37

        Это Вам спасибо! Я уже начал сомневаться в своих когнитивных способностях.


  1. Shiaju
    14.04.2024 15:37

    Не бросайте 1с. В нем никакой копайлот никогда не разберется)


  1. itmind
    14.04.2024 15:37
    +3

    при использовании 1С

    Где в статье хоть один текст запроса на языке запросов 1с?

    Где ответы copilot именно текстом для 1с? В статье MySQL.

    Статья должна называться "Пример дивергентного мышления ИИ при использовании MySQL запрос copilot"


  1. Gleidan
    14.04.2024 15:37
    +1

    Абсолютно не согласен насчёт утверждения, что в статье представлен пример «дивергентного мышления».

    1. Все описание не соответствует критериям дивергентного мышления.

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

    2. Дивергентное мышление основано на рефлексии. Но вместо ИИ вы рефлексировали все решения. Так что вы лишь привели пример своего дивергентного мышления