Как найти наименьшую стоимость от данного товара и его свойств? - PullRequest
0 голосов
/ 16 апреля 2019

Мой плавильный материал должен достичь требуемого свойства.Будет 2 комплекта материала 1) Лом 2) Ферросплавы Цель: достичь целевого значения каждого элемента с минимальной стоимостью. Например.После смешивания 1000 кг, мы хотим получить следующее свойство Углерод - 2,4% Кремний - 2,1% р - 0,015% S - 0,015%

Теперь Из данных наборов материалов мы определили значение, сколько мы можем получитькак из CRC (который является ломом) мы можем получить 1,1% углерода, из карбюризатора (ферросплавов) мы можем получить 78% углерода.Это означает, что если мы используем 100 кг CRC, мы можем получить 1,1 углерода, но мы используем 5 кг карбюризатора, мы можем получить 3,9 углерода.Таким образом, у нас есть все значения элемента для каждого материала.Также у нас есть цена каждого материала.Как CRC составляет 25 рупий / кг.и карбюратор 1500 / кг.соответственно, нам нужно смешать материал таким образом, чтобы он достиг целевого значения с минимальными затратами, например, чтобы получить 2,4% углерода, если мы используем 100 кг лома, то мы можем получить 1,1% углерода и требуемое 1,4, мы можем получить 1,8 кг карбюризатора.который стоит 2500 + 2700 = 5200 рупий.Это может быть любое число комбинаций, из которых нам нужно найти решение с наименьшей возможной стоимостью, но условие требуется, материал должен быть исчисляемым, как ответ должен быть 701,5, чем хорошо, но это не должно быть 701,115, поскольку никто не собирается измерять 115.грамм, когда на самом деле идет на микс.Таким образом, нам нужно найти минимально возможную стоимость и для этого, сколько кг, какой материал следует использовать?это пример одного элемента, но мы должны достичь всех целевых элементов.

Входные данные: Лом материала и значение его элемента с его стоимостью

CRC Лом C% - 1,5 Si% - 0,9 стоимости: 25 / кг

Чугун C% - 1,9 Si% - 1,1 Стоимость: 28 / кг

MS Scrap C% - 1,4 Si% - 0,9 Стоимость: 23,5 / кг

Стальной лом c% - 1,8 Si% ​​- 1,5 Стоимость: 29 / кг

Ферросплавы

Карбюризатор C% - 80 Si% 0 Стоимость: 1000 / кг

Ферросиликон C% - 0 Si% - 65 S% 10 Стоимость: 1200 / кг

Ферро-марганец c% - 0 S% - 20 P% - 15 Стоимость: 500 / кг

Медькуб.% - 98 Стоимость: 1500 / кг

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

Существует ли какой-либо алгоритм для решения этой проблемы?Или какой-нибудь метод, который может помочь мне найти стоимость аренды?

Спасибо.

1 Ответ

0 голосов
/ 17 апреля 2019

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

Целью оптимизации, которую вы хотите минимизировать, является общая стоимость:

f = w_CRC * cost_CRC + w_pigIron * cost_pigIron + ...

w_... - веса для каждого материала и представляют переменные оптимизации. Стоимость постоянна.

Затем вы добавляете следующие ограничения для моделирования ваших требований:

w_CRC + w_pigIron + w_MS + ... = totalWeight
w_CRC >= 0, w_pigIron >=0, w_MS >= 0 ...
w_CRC * C_CRC + w_pigIron * C_pigIron + ... = desiredCWeight
w_CRC * Si_CRC + w_pigIron * Si_pigIron + ... = desiredSiWeight

C_ и Si_ являются пропорциями элемента в соответствующем материале, а desiredXWeight = totalWeight * desiredXProportion.

Если вы хотите убедиться, что ваши результаты являются «хорошими» числами, вы можете добавить ограничения целостности и сделать это целочисленной линейной программой. Например, если вы хотите разрешить веса до первого десятичного знака, вы должны заменить веса w_X на 0.1 * u_X и решить для целых весовых коэффициентов u_X. Затем вы получите фактический вес с w_X = 0.1 * u_X. Тем не менее, я предполагаю, что оригинальная формулировка уже даст вам достаточно хорошие числа, где большинство весов, вероятно, равны нулю. Кроме того, введя ограничения целостности, вы можете сделать проблему неосуществимой. Таким образом, может быть необходимо сделать эти ограничения целостности мягкими. Вы можете сделать это, изменив цель оптимизации на

f = (... what we had before...) + a * ((w_CRC - 0.1 * u_CRC)^2 + (w_pigIron - 0.1 * u_pigIron)^2 + ...)

Здесь вы должны добавить целочисленные переменные u_X и сделать ваши веса w_X близкими к представленному весу. Константа a обозначает, насколько сильно вы хотите применить это ограничение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...