[/b/] [/d/] [/tu/] [/a/] [/ph/] [/wa/] [/cg/] [/t/] [/p/]

[Burichan] [Foliant] [Futaba] [Greenhell] [Gurochan] [Photon] - [Home] [Manage] [Archive]

[Return]
Posting mode: Reply
Leave these fields empty (spam trap):
Name
Link
Subject
Comment
File
Verification
Password (for post and file deletion)
  • Supported file types are: GIF, JPG, PDF, PNG
  • Maximum file size allowed is 20480 KB.
  • Images greater than 200x200 pixels will be thumbnailed.

File: 1603478947222.jpg -(138569 B, 1582x884) Thumbnail displayed, click image for full size.
138569 No.181602  

Как выбрать m оптимальных элементов из набора N? Есть какая-то функция стоимости, мы можем оценить каждый элемент индивидуально, но проблема в том что элементы зависят друг от друга и m элементов с максимальной индивидуальной стоимостью не дают максимально возможную групповую стоимость. Какие вообще существуют подходы для решения такой задачи?

>> No.181603  

Перебор?

Как зависят? Опиши зависимость функцией, найди ее минимум.

>> No.181607  

Удваиваю перебор.

>> No.181608  

>>181603
Если бы было известно как зависят, то я бы так и сделал.
Функция стоимости очень дорогая, даже аппроксимация выходит дорогой, так что полный перебор это не вариант.

>> No.181609  

>>181608
Тогда только аналитически расковыривать функцию оценки стоимости.

>> No.181613  

>>181609
Но мы же можем принять во внимание то что образцы с совсем низкой индивидуальной стоимостью скорее всего не увеличат общую стоимость. И если образцы с высокой индивидуальной стоимостью ухудшают общую стоимость нескольких комбинаций, то скорее всего их стоит исключить. Можно же как-то на основе этих вероятностей построить модель, которая поможет выбирать следующий набор после N известных?

>> No.181614  

>>181613

> образцы с совсем низкой индивидуальной стоимостью скорее всего не увеличат общую стоимость

Далеко не факт, оценочная функция может давать пики на каких-то определенных сочетаниях, например как в покере.

>> No.181620  

>>181614
Отличный пример. Но для меня хорошим результатом будет даже нахождение почти самой лучшей комбинации за какое-то малое число итераций. Задача кажется довольно тривиальной, должны же быть готовые решения?

>> No.181621  

>>181620
В общем случае это невозможно.

>> No.181629  

>>181620

Попробуй генетические алгоритмы.

Генерируешь N случайных решений задачи. Из них, выбираешь, например, 40% лучших. Как-то скрещиваешь их. Например, берешь два хороших решения и случайным образом выбираешь части из них для создания нового решения.

>> No.181630  

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

Потом просто округли частичные выборы элементов.

>> No.181632  

>>181629
>>181630
Допустим функция оценки это остаток от деления суммы номеров выбранных элементов на 10. Как это будет работать?

>> No.181633  

>>181629
Попробовал, ГА сам по себе не самый дешевый алгоритм, и он слишком медленно оптимизирует. Хотесь бы еще варианты.
>>181630
Можно подробнее о том что такое частичные выборы элементов и их округление? Можно на примере >>181632 или поиске комбинаций в покере.

>> No.181636  
File: 1603510452240.png -(5981 B, 471x212) Thumbnail displayed, click image for full size.
5981

>>181633

> частичные выборы элементов

Допустим есть элементы x1, x2, x3, ..., xN.

Дискретной выборкой будет что-то типа x1, _, x3, x4, _, _, ..., _ (где выбираются только x1, x3, x4).

Это можно описать бинарным вектором (1,0,1,1,0,...,0).

Для частичных выборок превращаем бинарный вектор в вектор чисел p_i, так что каждое 0 <= p_i <= 1 (можно интерпретировать это как вероятности).

> остаток от деления суммы номеров выбранных элементов на 10

Допустим есть десять элементов 1,2,3,4,5,6,7,8,9,0.

Нечеткой выборкой будет (p1,p2,p3,p4,p5,p6,p7,p8,p9,p10).

Суммой такой выборки будет 1*p1 + 2*p2 + 3*p3 + ... + 9*p9

Функция будет f(p_i) = (1*p1 + 2*p2 + 3*p3 + ... + 9*p9)%10

Мне кажется теперь можно взять любое начальное значение (p1,p2,p3,p4,p5,p6,p7,p8,p9), и затем посчитать градиент функции в этой точке, просто смотря на разности:

f'(p) = d_k f(p_i) = (f(p_1, ..., p_k + a, ..., p_9) - f(p_1, ..., p_k - a, ..., p_9))/(2a)

И дальше спускаться в противоположном направлении, типа: p_i^{k+1} = p_i^k - f'(p)

Ясное дело что функция не везде дифференцируема. Но она дифференцируемая почти везде, так что должно работать. Там где она не дифференцируема, можно просто пойти в случайном направлении, например.

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

>> No.181639  

>>181636

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

https://en.wikipedia.org/wiki/Constraint_programming

>> No.181644  

>>181636

> и затем посчитать градиент функции в этой точке, просто смотря на разности

Только вот для {6}, k={5} градиент будет отрицательным, для {4}, k={5} будет положительным. Куда тут двигаться?

> Но она дифференцируемая почти везде

Чтобы такое утверждать, нужно как минимум знать что-то о самой функции, а тут, насколько можно понять, она полностью неизвестна. Там может быть хоть заранее заданное случайное значение для каждой комбинации выбраных элементов.

>> No.181646  

>>181644

> Там может быть хоть заранее заданное случайное значение для каждой комбинации выбраных элементов.

Тогда только перебор. Но на практике функции часто имеют хоть какую-то структуру.



Delete Post []
Password

[/b/] [/d/] [/tu/] [/a/] [/ph/] [/wa/] [/cg/] [/t/] [/p/]