Форум программистов, компьютерный форум, киберфорум
Python: Научные вычисления
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
243 / 178 / 73
Регистрация: 17.10.2018
Сообщений: 749

Алгоритм для расчета

02.04.2020, 20:23. Показов 1382. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет. Подскажите, или перенаправьте в нужном направлении, а то не уверен, что в той ветке вопрос задаю)))
Есть набор данных. В этом наборе каждый элемент представляет собой тоже набор данных, пусть будет Х. Каждый Х имеет следующую структуру:
Х : К1, К2, К3, К4, К5, Р, где К1-К5 и Р - свойства Х.
Задача - найти Х (маловероятно и решено), или совокупность Х (что вероятнее всего и составляет проблему), где сумма К1 < n, сумма К2 < m, …., сумма К5 < z, а сумма Р - минимальная из всех возможных вариантов.
Вопрос - какой алгоритм можно использовать для решения этой задачи? У меня уже мозг дымится)))
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.04.2020, 20:23
Ответы с готовыми решениями:

Составить алгоритм для расчёта функции
Составить алгоритм для расчёта функции y при x=0..10 заранее спасибо)

Составить алгоритм для расчета функции
Вот такое задание: Данафункция x=a*sin(k*t+2)*cos(k*t). Составить алгоритм для расчета этой функции, если а изменяется от 5до 7 с шагом...

Составить алгоритм для расчета функции
1.Составить алгоритм для расчета функции y= ln(sin(x)+1)*0.15 при изменении x от 0 до 12 с шагом х=0.2.

15
578 / 411 / 69
Регистрация: 09.01.2018
Сообщений: 1,363
02.04.2020, 21:24
Если К1, К2, К3, К4, К5, Р, никак не связаны между собой - то полный перебор.
0
243 / 178 / 73
Регистрация: 17.10.2018
Сообщений: 749
02.04.2020, 21:57  [ТС]
passant, что-то типа такого?

Python
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
45
46
47
48
49
50
51
52
from itertools import *
 
 
my_dict = {'X1': [4, 41, 14, 25, 0, 105],
           'X2': [4, 0, 48, 2, 0, 56],
           'X3': [0, 18, 24, 14, 0, 84],
           'X4': [36, 24, 26, 39, 25, 44]
           }
 
param = [8, 13, 25, 0, 20]
 
 
twice_combination = combinations(my_dict.keys(), 2)
twice_combi = {}
for elem in twice_combination:
    twice_combi.setdefault(elem, list(map(sum, zip(my_dict[elem[0]], my_dict[elem[1]]))))
 
three_combination = combinations(my_dict.keys(), 3)
three_combi = {}
for elem in three_combination:
    three_combi.setdefault(elem, list(map(sum, zip(my_dict[elem[0]], my_dict[elem[1]]))))
 
 
def selecting(control_dict, inp_param):
    temp_values = {}
    p_list = []
    for key, val in control_dict.items():
        valid = 0
        for i in range(len(inp_param)):
            if inp_param[i] < val[i]:
                valid += 1
        if valid == len(val) - 1:
            temp_values.setdefault(key, val)
    if len(temp_values) > 0:
        for val in temp_values.values():
            p_list.append(val[-1:])
        minimum = min(p_list)
        for key, val in temp_values.items():
            if val[-1:] == minimum:
                return key
    else:
        return f'Решения не найдено'
 
 
if __name__ == '__main__':
 
    first_turn = selecting(my_dict, param)
    print(first_turn)
    second_turn = selecting(twice_combi, param)
    print(second_turn)
    third_turn = selecting(three_combi, param)
    print(third_turn)
0
2744 / 1670 / 269
Регистрация: 19.02.2010
Сообщений: 4,421
02.04.2020, 23:05
Цитата Сообщение от Lekks Посмотреть сообщение
Задача - найти ... совокупность Х (что вероятнее всего и составляет проблему), где сумма К1 < n, сумма К2 < m, …., сумма К5 < z, а сумма Р - минимальная из всех возможных вариантов.
Я бы тут задачу оптимизации с ограничениями попробовал. Добавив каждому иксу вес, который процедура оптимизации должна загнать в 0 или в 1. Веса эти будут домножаться на Ki и P в ограничениях и в минимизируемой сумме.
После расчёта - все иксы с околонулевыми весами выкидываются, для оставшихся проверяется (уже без весов) соответствие исходным условиям=ограничениям на Ki.

В общем, если метод множителей Лагранжа знаком - то я именно в ту сторону намекаю. По сравнению с Вашей исходной постановкой - добавил только веса иксам и ограничения на эти веса.
0
243 / 178 / 73
Регистрация: 17.10.2018
Сообщений: 749
03.04.2020, 13:50  [ТС]
VTsaregorodtsev, ну, с позиций теории немного знаком (правда давненько), кой-чего полистал еще, все равно не въезжаю, как должна выглядеть целевая функция и функция ограничений.

Добавлено через 36 минут
Лол, блин... доп. условие - распределение Xi в совокупности, т.е. n1X1 + n2X2 + ... = 1, n1...ni = ???
0
2744 / 1670 / 269
Регистрация: 19.02.2010
Сообщений: 4,421
03.04.2020, 16:15
Lekks,
Пусть у K будет двойной индекс - первым обозначаем номер икса (элемента, строки в таблице), второй - номер колонки (номер К). Тогда
w1*К11 + w2*К21 + ... wn*Кn1 < n,
w1*К12 + w2*К22 + ... wn*Кn2 < m,
и ещё три ограничения на сумму Kij (при суммировании по i)
Далее w1*P1 + w2*P2 + ... wn*Pn -> min.
И ограничения на каждый вес (чтобы загнать его в 0/1) - что-то типа wi(1-wi)=0
В общем, вес wi - он один на строку таблицы (для икса, т.е. одинаковый для всех пяти K и одного P в строке).

Про доп.условие - что-то не понял, ведь икс - это набор исходно из 6 значений. Как такой вектор взвешивать с помощью ni? Именно как вектор из 6 компонент? Тогда ОК (в смысле - можно записать такое ограничение) - но зачем оно? Может, подробно исходную задачу опишете, чтобы подумать именно над задачей (на не над некой Вашей/чужой формулировкой, которая может оказываться уже неправильной).
0
243 / 178 / 73
Регистрация: 17.10.2018
Сообщений: 749
03.04.2020, 16:46  [ТС]
VTsaregorodtsev, смотрите:

X - это некое химическое вещество, которое состоит из некоторого числа элементов К. Из нескольких Х можно собрать другое вещество, на которое накладывается ограничение по нескольким К. Каждое Х имеет цену. Задача - "собрать" новое вещество из нескольких Х с учетом ограничений по К, которое (новое вещество) будет иметь минимальную цену из всех возможных вариантов.

Неопределенности состава каждого Х можно откинуть, так как проверяем по определенному набору К, соответственно, элементы К в Х, не попадающие в набор ограничений, проверке не подлежат.

Сейчас я иду все-таки путем перебора, получаю наборы Х (примерно как в коде выше). После получения наборов Х путем решения уравнения
а(sum(K1)) + в(sum(K2)) + с(sum(K3)) + ... = 1, где sum(Kn) - сумма количества элемента Кn в наборе, получаю разные комбинации (а, в, с ...), после чего беру цены из словаря по ключам набора Х (Х1, Х2, Х3,...), суммирую с учетом коэффициентов (а, в, с,.. ) в наборе и ищу минимальную сумму.

Но что-то это мне совсем не нравится. Куча циклов и условий, в том числе вложенных, не уверен, что это верный путь, кроме того вот наверняка же можно применить нормальный алгоритм.
0
243 / 178 / 73
Регистрация: 17.10.2018
Сообщений: 749
04.04.2020, 15:15  [ТС]
Мой путь оказался неверным... Либо цикл бесконечный, либо точности не хватает
0
5519 / 2872 / 571
Регистрация: 07.11.2019
Сообщений: 4,767
04.04.2020, 17:19
Lekks, а какие размеры наборов данных X,K? Если иксов - 4, то можно и полным перебором, т.к. вариантов всего ничего..
0
243 / 178 / 73
Регистрация: 17.10.2018
Сообщений: 749
04.04.2020, 18:38  [ТС]
u235, нет, может быть любое число как Х, так и К. Но число К для всех Х - одинаково. Хотя получение комбинаций показывает, что как правило набор из 2-4 Х уже имеет необходимое решение, независимо от того, сколько всего предложено Х. Надо получить достаточное - то есть сколько какого Х взять. И перебором я не могу реализовать вычисление именно процентного соотношения Х1 - XN в новом веществе.
0
2744 / 1670 / 269
Регистрация: 19.02.2010
Сообщений: 4,421
04.04.2020, 20:13
Цитата Сообщение от Lekks Посмотреть сообщение
реализовать вычисление именно процентного соотношения Х1 - XN в новом веществе.
О, я понял тот момент, который раньше не понимал (и последним абзацем в посте #6 ушёл мыслями/вопросами не туда, а Вы затем в посте #7 меня не навели на правильное понимание - что надо искать и доли составляющих веществ). Просто в #5 Вы не сказали, что ni должны быть неотрицательными значениями - вот и не возникло мысли, что Вам нужны доли.

Цитата Сообщение от Lekks Посмотреть сообщение
может быть любое число как Х, так и К.
А конкретные примеры значений этих размерностей - можно?


PS. В 1996ом занимался похожей задачей - но вместо ограничений на <n, <m, ..., <z (тут идёт отсылка к обозначениям из стартового поста темы) требовалось как можно более точное приближение значений свойств целевого объекта, и веса прогнозирующих объектов могли быть отрицательными. Т.е. строилась линейная регрессия не внутри строк таблицы, а внутри столбцов, и поскольку одна такая регрессия для всех объектов таблицы невозможна (слишком уж могут быть разноплановые признаки) - то из всех объектов=строк выбиралось малое число объектов, прогнозирующих данный. Ну и Ваше ограничение на минимальную цену - заменялось на регуляризующий критерий (штрафующий за большие веса, чтобы уменьшить чувствительность прогноза к очепяткам/неточностям значений свойств прогнозирующих объектов). Фактически, был вариант задачи коллаборативной фильтрации - не на основе схожести откликов разных людей, а через поиск возможности прогнозирования откликов некоторого человека по откликам иных людей с помощью лин.регрессии.
0
243 / 178 / 73
Регистрация: 17.10.2018
Сообщений: 749
04.04.2020, 21:19  [ТС]
VTsaregorodtsev,
Цитата Сообщение от VTsaregorodtsev Посмотреть сообщение
А конкретные примеры значений этих размерностей - можно?
chemix = {'N1': [0.108, 0.145, 11.610, 2.772, 6.930, 1.655, 0],
'N2': [0.099, 0.148, 12.150, 2.901, 7.650, 1.827, 0],
'N3': [0.098, 0.150, 11.704, 2.795, 7.656, 1.828, 0],
'N4': [0.405, 0.270, 13.064, 3.120, 8.372, 1.999, 0],
'N5': [0, 0, 0, 0, 0, 0, 2.000]
}
prices = {'N1': 6.22, 'N2': 11.11, 'N3': 10.23, 'N4': 35.49, 'N5': 64.42}
param = [0.15, 0, 0, 0, 9, 0, 0.0075]


Начальное количество N - можно задать, всего вариантов N около 200. Каждое N состоит из компонентов числом от 5 до 70. Param может включать от 1 до 70 (т.е. до максимально возможного в N) компонентов. При этом выбрав компоненты для проверки, мы можем некоторые значения не задавать (нули в param), в этом случае предварительно можно откорректировать длину chemix.values() и param, выкинув нулевые значения из списков.

В практике количество N чаще всего от 1 до 10, редко больше. Количество компонентов для проверки - 3-8, редко меньше или больше.

Добавлено через 22 минуты
И повторюсь - в ходе обработки комбинаций необходимое решение, т.е. chemix[Ni][0] < (или >) param[0] и т.д. до chemix[Ni][-1], param[-1] находится как правило в комбинации из 2-4 N. Достаточное же решение, т.е.
price(newN = aN1+bN2+..+zNi) -> min чет даже мыслей нет как найти.
0
243 / 178 / 73
Регистрация: 17.10.2018
Сообщений: 749
05.04.2020, 19:49  [ТС]
Кажется, для решения подойдет scipy.optimize.minimize, но теперь я не пойму, как должна выглядеть функция, в каком параметре передавать ограничения на элементы и условие на минимум цены.
0
0 / 0 / 0
Регистрация: 06.04.2020
Сообщений: 6
06.04.2020, 20:47
Привет, Lekks!
Я попробую переформулировать задачу эквивалентно.
Мы управляем фермой.
У нас есть несколько плохих комбикормов.
Каждый комбикорм полностью и одинаково хорошо покрывает все потребности животных в еде.
Есть различные типы вредных веществ.
У каждого комбикорма есть набор концентраций типов вредных веществ в нём. (масса вещества на кг корма)
Мы пытаемся смешать комбикорма в некоторой пропорции.
У каждого типа вредной добавки есть своя предельная допустимая концентрация.
Мы обязаны смешать корма так, чтобы не превысить допустимую концентрацию ни одного из типов вредных веществ.
У каждого комбикорма есть цена. (за кг)
Мы пытаемся смешать комбикорма так, чтобы минимизировать цену смеси. (за кг)

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

Задача про ферму -- задача линейного программирования (потому что набор ограничений и то, что мы оптимизируем -- линейные относительно "двигабельных" параметров функции, елси нужно, могу объяснить подробнее).
Если количество типов вредных примесей и количество типов корма достаточно мало (например, 5 примесей и 100 кормов), то за разумное время найдёт точный ответ алгоритм вроде такого:
"""
Пербрать мелкие наборы линейных ограничений, для каждого набора:
Решить систему линейных уравнений, получить точку Т
Проверить, удовлетворяет ли Т всем остальным условиям, и если да, то записать в список "Кандидаты"
Выбрать наилучшего Канидата.
"""
Если нужно, я могу описать алгоритм более чётко и подробно. На практике вместо всего этого должно сработать просто запустить симплекс-метод.

Для случаев побольше начинать, наверное, стоит тоже с симплекс-метода, но есть и другие техники.
0
243 / 178 / 73
Регистрация: 17.10.2018
Сообщений: 749
06.04.2020, 21:22  [ТС]
Murmuron, спасибо. Да, задача в целом такая. Единственное - ограничения могут быть "от" - "до". В общем-то способ я уже вроде как нашел. Теперь мучаю ограничения)))

тут
0
243 / 178 / 73
Регистрация: 17.10.2018
Сообщений: 749
07.04.2020, 10:46  [ТС]
Решено через scipy.optimize.minimize
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.04.2020, 10:46
Помогаю со студенческими работами здесь

Алгоритм для расчета центра масс
дело в следующем к N набору записей имеется N вейвлет спектров (двумерные массивы). необходимо выделить среднюю (по формуле центра масс...

Составить алгоритм для расчета значений
Program FindMaxXYZ; Var x,y,z,max: Real; BEGIN Write('Введите 3 действительных числа '); ReadLn(x,у,z); If x&gt;y then max:=x...

Составить алгоритм для расчета функции
не могу разобраться, на дистанционке нас не учат, а лабораторные требуют C# Составить алгоритм для расчета функции ...

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

Составить алгоритм для расчета значений выражений
Составить алгоритм для расчета значений выражений. Реализовать алгоритм в Turbo Pascal. Отсутствующие в языке функции выразить через...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru