powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / алгоритм подбора
19 сообщений из 19, страница 1 из 1
алгоритм подбора
    #37102177
MaximuS_G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет! :)
Давно уже я не заходил на этот форум...
У меня есть нетривиальная задача, подобную которой уже возможно кто-то решал, и поможет решить эту :).
Либо просто предложит хорошее решение. Можно макрос, либо просто логику, а макрос я напишу сам.
Задача:
Есть 80 вопросов разных уровней сложности (от 1 до 5).
Каждый из этих вопросов относится к определенной категории (16).
Необходимо сформировать 20 анкет по 10 вопросов разных категорий в каждой таким образом, чтобы средний вес (сложность) вопросов была примерно одинаковая для всех анкет.
Заранее благодарю! :)

Файл во вложении.
...
Рейтинг: 0 / 0
алгоритм подбора
    #37102367
_slan_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaximuS_G,


по-моему все достаточно просто:

5 уровней, 10 вопросов - наиболее логично, чтобы в каждой анкете было по два вопроса каждого уровня..

складываем все вопросы в массив , допустим категорий - arr(1 to 16)

элементами которого будут, в свою очередь, двумерные массивы: r(1 to 5,0 to 99) - т.е. по строкам уровни сложности, по столбцам - номера вопросов . в нулевых элементах отмечаем количество вопросов данной категории данного уровня.

создаем копию всего массива.

собъявляем сигнальный массив номеров категорий -arr_i(1 to 16)

случайным образом выбираем категорию
ищем вопрос 5го уровня ( два раза), если находим, то удаляем его из массива, перенося в результат
если не находим, то идем в другую категорию - вправо или влево, - все равно
прописываем в сигнальный массив единицу по соответств адресу
снова случайно берем категорию - от1 до 15, пробегаемся по сигнальному массиву и пишем единицу в 15й нулевой элемент
ищем вопрос 4го уровня... и т.д.

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


когда все вопросы кончатся, из копии восстанавливаем массив вопросов( а можно это сделать и коллекцией)
по окончании, для пущего прикола, перемешиваем вопросы в анкетах..
...
Рейтинг: 0 / 0
алгоритм подбора
    #37102377
_slan_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_slan_,

для простоты реализации - зарядить два цикла по уровням от1 до 5
...
Рейтинг: 0 / 0
алгоритм подбора
    #37102436
MaximuS_G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_slan_, спасибо что заглянули! :)
Не совсем понял Ваше решение... скажите, оно учитывает тот факт, что для одной категории может вообщем не быть вопросов определенного уровня, а для другой могут быть вопросы все одного уровня?
...
Рейтинг: 0 / 0
алгоритм подбора
    #37102462
MaximuS_G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мое решение такое (но длинное):
1. Перебираем все комбинации по 10 из 80 (больше триллиона!)
2. Отбираем комбинации, в которых не повторяются категории.
3. Из полученных комбинаций отбираем наиболее равные по весу.
...
Рейтинг: 0 / 0
алгоритм подбора
    #37102701
Фотография Shamanus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaximuS_G,

задача про рюкзак

если примитивно то средний внутрикатегорийный вес вопроса 2,79.
Значит общий вес рюкзака около 55,75
Вес каждого элемента известен.
Наполните рюкзак 20 элементами не превышая вес в 55,75

Повторить алгоритм N раз
1. Начинаете спиральным спуском набирать товары из каждой группы.
2. Оцениваете размер получившейся группы в весе, вычитаете из ожидаемого веса (55,75)
3. выборочно добиваете вес до 55,75 (допустим через N групп)
4. Увеличиваете стартовое значение спирального спуска на 1
следующий N


p.s. можно доработать алгоритм для работы со средневзвешенным значением
...
Рейтинг: 0 / 0
алгоритм подбора
    #37102707
Фотография Shamanus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
неверно прочитал, что нужно 10 позиций
тогда ващпе проще все

тупо спиральный спуск
...
Рейтинг: 0 / 0
алгоритм подбора
    #37103038
Фотография Сын вождя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaximuS_G...сформировать 20 анкет по 10 вопросов разных категорий...сложность...примерно одинаковая
Реализовал в VBA, на массивах, с элементом случайности:
Код: plaintext
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.
Const Категорий As Long =  16    ' количество категорий
Const Сложность As Long =  5     ' количество уровней сложности
Const Анкет As Long =  20        ' количество анкет
Const Анкета As Long =  10       ' вопросов в анкете
' исходный массив вопросов
Dim Вопросы( 1  To Категорий,  1  To Сложность) As String
' конечный массив анкет
Dim Анкеты( 1  To Анкет,  1  To Анкета) As String
' переменные
Dim А As Long, В As Long, К As Long, С As Long, Н As Long
Dim Шаг_категорий As Single
Dim Шаг_сложности As Single
Dim Сложности( 1  To Анкета) As Boolean

    ' заполняем исходный массив
    For К =  1  To Категорий
        For С =  1  To Сложность
            Вопросы(К, С) = "Категория " & CStr(К) & " / Сложность " & CStr(С)
        Next С
    Next К

    ' предварительные расчеты
    Шаг_категорий = (Категорий -  1 ) / Анкета
    Шаг_сложности = (Сложность -  1 ) / (Анкета -  1 )
    ' перебираем анкеты
    For А =  1  To Анкет
        ' сброс массива использований сложности
        Erase Сложности
        ' перебираем вопросы анкеты
        For В =  1  To Анкета
            ' случайная сложность
            Н =  1  + Round((Анкета -  1 ) * Rnd)
            Do While Сложности(Н) = True
                If Н < Анкета Then Н = Н +  1  Else Н =  1 
            Loop
            ' расчет сложности
            С =  1  + Round(Шаг_сложности * (Н -  1 ))
            ' метим использованную сложность
            Сложности(Н) = True
            ' расчет категории
            К =  1  + Round(Шаг_категорий * (В - Rnd))
            ' копируем вопрос в анкету
            Анкеты(А, В) = Вопросы(К, С)
        Next В
    Next А
...
Рейтинг: 0 / 0
алгоритм подбора
    #37103828
_slan_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaximuS_G_slan_, спасибо что заглянули! :)
Не совсем понял Ваше решение... скажите, оно учитывает тот факт, что для одной категории может вообщем не быть вопросов определенного уровня, а для другой могут быть вопросы все одного уровня?


не совсем.. могут быть патовые ситуации. наверное.. :) надо эксперементировать.. но перебор вариантов - это явно перебор :)

а почему не придумать нужные вопросы? чтобы было равномерное распределение по категориям?
...
Рейтинг: 0 / 0
алгоритм подбора
    #37104526
_slan_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот, что-то получилось..

работает мгновенно, суммарная сложность одинакова для каждого билета(подтверждается формулами справа), а уж подходит или нет - судите сами
...
Рейтинг: 0 / 0
алгоритм подбора
    #37107865
m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
m
Гость
Shamanus , спасибо что заглянули!

Сын вождя, _slan_
Спасибо за реализацию задачи кодом :)
Если не сложно, можно Ваши алгоритмы словами?... Честно, нет желания в коде разбираться.
Заранее спасибо!
...
Рейтинг: 0 / 0
алгоритм подбора
    #37107942
Фотография Сын вождя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mможно Ваши алгоритмы словами?
В основе алгоритма две функции линейной зависимости:
1. Категории от номера вопроса в анкете
2. Сложности от номера вопроса в анкете
Категория считается для каждого вопроса анкеты. Если зависимость категории один ко многим, то включается элемент случайности.
Сложность считается для каждой анкеты, с последующим случайной выборкой для каждого вопроса.
...
Рейтинг: 0 / 0
алгоритм подбора
    #37108018
Михаил Ч.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Данную задачу интересно решить формулами, без использования макросов. По моему получилось, проверяйте.
Основная используемая функция - СЛУЧМЕЖДУ, обновить перестановку - нажать F9
Сложность анкет можно изменять, задав необходимое значение в ячейке J9.
...
Рейтинг: 0 / 0
алгоритм подбора
    #37108148
_slan_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m Shamanus , спасибо что заглянули!

Сын вождя, _slan_
Спасибо за реализацию задачи кодом :)
Если не сложно, можно Ваши алгоритмы словами?... Честно, нет желания в коде разбираться.
Заранее спасибо!


еще раз? :) я уже излагал.. нет желания - нет желания..
...
Рейтинг: 0 / 0
алгоритм подбора
    #37108354
MaximuS_G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Михаил Ч. , спасибо большое за Ваше интересное решение формулами! :)

Всем спасибо за участие! Удачи! :)
...
Рейтинг: 0 / 0
алгоритм подбора
    #37108451
_slan_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторДанную задачу интересно решить формулами, без использования макросов. По моему получилось, проверяйте.
Основная используемая функция - СЛУЧМЕЖДУ, обновить перестановку - нажать F9
Сложность анкет можно изменять, задав необходимое значение в ячейке J9.
а ничего, что иногда в анкету не попадает ни одного "сложного" вопроса? :)

или уж повезет, так повезет?
...
Рейтинг: 0 / 0
алгоритм подбора
    #37108528
Михаил Ч.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_slan_а ничего, что иногда в анкету не попадает ни одного "сложного" вопроса? :)
или уж повезет, так повезет?
По моему нормально, общий вес вопросов в анкете подбирается случайным образов до нужного значения, которое можно регулировать. Вопросы должны быть так составлены и ранжированы, что вопросы с весом 1 и 5, равносильны двум вопросам с весом 3, или вопросам с весом 2 и 4.

В данном варианте веса можно проставить и вручную например 1,1,2,2,3,3,4,4,5,5 - каждого по паре (с общим весом 30), или каким угодно другим способом, формулы при этом подберут нужные вопросы
...
Рейтинг: 0 / 0
алгоритм подбора
    #37108583
Михаил Ч.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В качестве компромиса:
устанвить вручную по одному вопросу каждой "сложности", остальные подберутся случайным образом
...
Рейтинг: 0 / 0
алгоритм подбора
    #37108792
_slan_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Михаил Ч.,

согласен - решение есть.
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / алгоритм подбора
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]