Вопросы с тегами [pulp]

1

голосов
1

ответ
51

Просмотры

When using pulp cbc solver, can I set priorities for constraints?

I am trying to calculate an optimal answer to a set of binary variables with lots of constraints. I would like to set priorities for the constraints. ex) constraint 1, 2, 3 has priority 100 (highest) and constraint 4, 5, 6 has priority 1 (lowest) I am currently using pulp linear programming and cbc solver to solve a production scheduling problem. A small part of my data would look like this. t0 t1 t2 t3 t4 t5 t6 t7 t8 t9 a v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 b v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 c v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v_list = [[v1, v2, v3, v4, v5, v6, v7, v8, v9, v10], [v11, v12, v13, v14, v15, v16, v17, v18, v19, v20], [v21, v22, v23, v24, v25, v26, v27, v28, v29, v30]] n_rows = v_list.shape[0] n_columns = v_list.shape[1] Each variable may be -1, 0, 1 The constraints I set will be something like below. m = LpProblem() # constraint 1, 2 = find absolute value of each variables m += vxx
Kevin Lee
1

голосов
1

ответ
24

Просмотры

Как исправить Целлюлозно VRP Модель, которая не удовлетворяет Biner Constraint

Я создаю модель VRP (Vehicle Routing Problem с помощью питона пульпа, но он не может найти оптимальное решение, которое удовлетворяет все ограничения, используя этот файл XLS:. Https://drive.google.com/file/d/1s7rOQCULynGxQk8_IMlvHl286d4WfdPt/view? УСП = совместное использование импорта целлюлозы, панды, itertools импортировать NumPy, как нп XLS = pandas.ExcelFile ( 'данные узла VRP 2.xls') вес = pandas.read_excel (XLS, 'Лист1') sheet2 = pandas.read_excel (XLS, «Лист2 «) matrixjarak = pandas.read_excel (XLS, 'matrixjarak') # вес = sheet1.as_matrix () транспортного средства = sheet2.as_matrix () #vehicle matrixjarak = matrixjarak.as_matrix () модель = pulp.LpProblem ( "VRP проблема", целлюлоза .LpMinimize) d = масса [ 'спрос'] с = matrixjarak J = np.arange (LEN (с) -5) #create массив 0 .. р = np.arange (LEN (транспортное средство)) С = транспортным средством х = целлюлоза .LpVariable.dicts ( «узлы к узлам»,((Г, I, J) для г в J для J в J для г в р), lowBound = 0, кошка = модель 'Бинер) + = (pulp.lpSum ([с [I] [J] * х [(г, I, J)] для г в J для J в J для г в р, если I = J])) # 1 в из всегда 1 для г в диапазоне (1, Len (J), -1): модель + = pulp.lpSum ([х [г, I, J] для J в диапазоне (1, Len (J), -1) при г в р, если я! = J]) == 1 #model + = целлюлозы. lpSum ([х [г, I, J] для J в диапазоне (1, длина (J), -1) при г в р, если я! = J]) == 1 для J в диапазоне (1, Len (J), -1): модель + = pulp.lpSum ([X [R, I, J] для I в диапазоне (1, Len (J), -1) при г в р, если у = я!]) == 1 #model + = pulp.lpSum ([х [г, I, J] для J в диапазоне (1, длина (J), -1) при г в р, если я! = J]) == 1 # 2 емкость для г в р : модель + = pulp.lpSum ([! г [г] * х [г, I, J] для I в J для J в J, если I = J])= J])= J])к) при г в J для J в J для г в р), lowBound = 0, кошка =) модели 'Бинер' + = (pulp.lpSum ([с [I] [J] * х [(R, I, ! к)] для г в J для J в J для г в р, если I = J])) # 1 в из всегда 1 для г в диапазоне (1, длина (J), -1): модель + = pulp.lpSum ([х [г, I, J] для J в диапазоне (1, длина (J), -1) при г в р, если я! = J]) == 1 #model + = pulp.lpSum ([х [г , I, J] для J в диапазоне (1, длина (J), -1) при г в р, если I = J]) == 1 для J в диапазоне (1, Len (J), -1): модель + = pulp.lpSum ([х [г, I, J] для I в диапазоне (1, длина (J), -1) при г в р, если J! = я]) == 1 #model + = pulp.lpSum ( [х [г, I, J] для J в диапазоне (1, длина (J), -1) при г в р, если I = J!]) == 1 # 2 емкость для г в р: модель + = целлюлозы. lpSum ([г [г] * х [г, I, J] для I в J для J в J, если я! = J])к) при г в J для J в J для г в р), lowBound = 0, кошка =) модели 'Бинер' + = (pulp.lpSum ([с [I] [J] * х [(R, I, ! к)] для г в J для J в J для г в р, если I = J])) # 1 в из всегда 1 для г в диапазоне (1, длина (J), -1): модель + = pulp.lpSum ([х [г, I, J] для J в диапазоне (1, длина (J), -1) при г в р, если я! = J]) == 1 #model + = pulp.lpSum ([х [г , I, J] для J в диапазоне (1, длина (J), -1) при г в р, если I = J]) == 1 для J в диапазоне (1, Len (J), -1): модель + = pulp.lpSum ([х [г, I, J] для I в диапазоне (1, длина (J), -1) при г в р, если J! = я]) == 1 #model + = pulp.lpSum ( [х [г, I, J] для J в диапазоне (1, длина (J), -1) при г в р, если I = J!]) == 1 # 2 емкость для г в р: модель + = целлюлозы. lpSum ([г [г] * х [г, I, J] для I в J для J в J, если я! = J])Кошка = модель 'Бинер) + = (pulp.lpSum ([с [I] [J] * х [(г, I, J)] для г в J для J в J для г в р, если я! = у ])) # 1 в из всегда 1 для г в диапазоне (1, Len (J), -1): модель + = pulp.lpSum ([X [R, I, J] для J в диапазоне (1, Len (Дж ) -1) при г в р, если я! = J]) == 1 #model + = pulp.lpSum ([х [г, I, J] для J в диапазоне (1, Len (J), -1) для г в р, если I = J]) == 1 для J в диапазоне (1, Len (J), -1): модель + = pulp.lpSum ([X [R, I, J] для I в диапазоне (1 , длина (J), -1) при г в р, если J! = я]) == 1 #model + = pulp.lpSum ([х [г, I, J] для J в диапазоне (1, Len (J), -1) при г в р, если I = J]) == 1 # 2 емкость для г в р: модель + = pulp.lpSum ([d [I] * х [г, I, J] для I в J для J в J, если я! = J])Кошка = модель 'Бинер) + = (pulp.lpSum ([с [I] [J] * х [(г, I, J)] для г в J для J в J для г в р, если я! = у ])) # 1 в из всегда 1 для г в диапазоне (1, Len (J), -1): модель + = pulp.lpSum ([X [R, I, J] для J в диапазоне (1, Len (Дж ) -1) при г в р, если я! = J]) == 1 #model + = pulp.lpSum ([х [г, I, J] для J в диапазоне (1, Len (J), -1) для г в р, если I = J]) == 1 для J в диапазоне (1, Len (J), -1): модель + = pulp.lpSum ([X [R, I, J] для I в диапазоне (1 , длина (J), -1) при г в р, если J! = я]) == 1 #model + = pulp.lpSum ([х [г, I, J] для J в диапазоне (1, Len (J), -1) при г в р, если I = J]) == 1 # 2 емкость для г в р: модель + = pulp.lpSum ([d [I] * х [г, I, J] для I в J для J в J, если я! = J])= J])) # 1 в из всегда 1 для г в диапазоне (1, длина (J), -1): модель + = pulp.lpSum ([X [R, I, J] для J в диапазоне (1, длина (J), -1) при г в р, если я! = J]) == 1 #model + = pulp.lpSum ([х [г, I, J] для J в диапазоне (1, длина (J) -1 ) при г в р, если I = J]) == 1 для J в диапазоне (1, Len (J), -1): модель + = pulp.lpSum ([х [г, I, J] для I в диапазоне (1, длина (J), -1) при г в р, если J! = я]) == 1 #model + = pulp.lpSum ([х [г, I, J] для J в диапазоне (1, Len ( J) -1) при г в р, если I = J]) == 1 # 2 емкость для г в р: модель + = pulp.lpSum ([d [I] * х [г, I, J] инт в J для J в J, если я! = J])= J])) # 1 в из всегда 1 для г в диапазоне (1, длина (J), -1): модель + = pulp.lpSum ([X [R, I, J] для J в диапазоне (1, длина (J), -1) при г в р, если я! = J]) == 1 #model + = pulp.lpSum ([х [г, I, J] для J в диапазоне (1, длина (J) -1 ) при г в р, если I = J]) == 1 для J в диапазоне (1, Len (J), -1): модель + = pulp.lpSum ([х [г, I, J] для I в диапазоне (1, длина (J), -1) при г в р, если J! = я]) == 1 #model + = pulp.lpSum ([х [г, I, J] для J в диапазоне (1, Len ( J) -1) при г в р, если I = J]) == 1 # 2 емкость для г в р: модель + = pulp.lpSum ([d [I] * х [г, I, J] инт в J для J в J, если я! = J])Len (J), -1) при г в р, если у = я]) == 1 #model + = pulp.lpSum ([х [г, I, J] для J в диапазоне (1, Len (J)! - 1) при г в р, если I = J]) == 1 # 2 емкость для г в р: модель + = pulp.lpSum ([d [I] * х [г, I, J] для I в J для J в J, если я! = J])Len (J), -1) при г в р, если у = я]) == 1 #model + = pulp.lpSum ([х [г, I, J] для J в диапазоне (1, Len (J)! - 1) при г в р, если I = J]) == 1 # 2 емкость для г в р: модель + = pulp.lpSum ([d [I] * х [г, I, J] для I в J для J в J, если я! = J])
Rio Aurachman
1

голосов
1

ответ
835

Просмотры

Как избежать ошибок памяти при сохранении всех комбинаций в списке

Я генерация всех комбинаций из набора цифр, а затем хочу создавать комбинации этих комбинаций. Из-за огромного количества возможных комбинаций я получаю ошибку памяти. Я посмотрел на следующие вопросы, но ни один из них действительно решить мою проблему: Создание всех комбинаций набора и кончаются itertools.combinations Python памяти () проблемы с памятью ошибки Python список памяти Я генерирующего мой список, используя следующий метод: #generate все комбинации 1 и 0 размер 30 set_1 = itertools.product ([0,1], повторить = 30) #generate все комбинации множества 1, размером 5 set_2 = [кортеж (с) для с в pulp.allcombinations ( set_1, 5)] для множеств в set_2: печать (наборы) Их ошибка памяти происходит во время его формирования set_2. Я хотел бы еще иметь возможность перебрать set_2 как мне нужно будет получить доступ множества позже.
user35510
1

голосов
1

ответ
392

Просмотры

Многопоточность для библиотеки Целлюлозно в питона

Я хочу, чтобы решить задачу оптимизации с использованием библиотеки Целлюлозна в питоне. Моя задача оптимизации имеет> 10000 переменные и много ограничений. Это занимает очень много времени для мякоти решать такие большие проблемы. Есть ли способ, мы можем реализовать много поточности и набирать скорость? Любое другое решение / библиотека для таких больших задач оптимизации?
Pratik Gujarathi
1

голосов
2

ответ
249

Просмотры

Как добавить ограничение, чтобы сохранить завод включен или выключен в течение определенного периода времени в Pulp?

Я довольно новый для линейного программирования и работаю на пример, что сводит к минимуму стоимости производства завода. В этом примере есть возможность переключения на заводе и выключаться. Мой вопрос, как я могу добавить в дополнительных ограничениях, если завод выключается тогда своими потребностями в выключенном в течение 3-х месяцев, и если он переключается обратно на то он должен остаться на 4 месяца? Код: импорт панды как П.Д. импорт целлюлозы заводов = pd.DataFrame.from_csv ( 'CSV / factory_variables.csv', index_col = [ 'Месяц', 'Фабрика']) спроса = pd.DataFrame.from_csv ( 'CSV / monthly_demand.csv », index_col = [ 'месяц']) # производство = pulp.LpVariable.dicts ( "производство", ((месяц, завод) за месяц, завод в factories.index), ] Factory_B_index = [TPL для TPL в factories.index, если TPL [1] == 'В'] # Определить целевую функцию модели + = pulp.lpSum ([производство [M, F] * factories.loc [(м, е) , 'Variable_Costs'] для M, F в factories.index] + [factory_status [M, F] * factories.loc [(M, F), 'Fixed_Costs'] для M, F в factories.index] + [switch_on [ м, е] * 20000 для т, е в factory_A_index] + [switch_on [т, е] * 400000 для т, е в factory_B_index]) # Производство в любом месяце должно быть равно требовать месяцев = demand.index в течение месяца в месяцах : модель + = производство [(месяц, 'а')] + производство [(месяц, 'B')] == demand.loc [месяц, 'Спрос'] # производство в любом месяце должно быть между минимальной и максимальной мощности, или ноль. за месяц, завод в factories.index: min_production = factories.loc [(месяц, завод), "
usermw
1

голосов
2

ответ
2.5k

Просмотры

Не удается установить Целлюлозно в Anaconda

Python новичок здесь. Я пытаюсь установить мякоти. Так что я пипс установить Pulp в командной строке Конда и выглядит как инсталлируется мякоть. Я бегу список Конда и я могу видеть, что Pulp есть в списке (см рисунок). Однако, когда я пытаюсь импортировать Целлюлозно в IDLE, я получаю сообщение об ошибке, и я не могу видеть Целлюлозно в списке сред в Anaconda навигатора (не уверен, если я должен). Если Мякоть в списке, то почему я не могу импортировать его или увидеть его в навигаторе. Любые материалы будут оценены.
AMPLnewbie
1

голосов
1

ответ
355

Просмотры

Кратчайший путь формулировка ЛПА: обратная линии связи принимает значение 1 на

Я пытаюсь реализовать формулировку ILP кратчайшего пути проблемы с помощью пакета Целлюлозно в питона. Ввода представляет собой график, генерируется с использованием пакета NetworkX. импортировать NetworkX в качестве импорта ого импорта целлюлозы случайного импорта matplotlib.pyplot как рх г = nx.to_directed (nx.barabasi_albert_graph (20, 2)) # nx.draw (г, with_labels = True) # plt.show () источник = 0 мишени = 13 dict_d = {}, для I, J в g.edges: dict_d [I, J] = dict_d [J, I] = круглый (random.uniform (1,0, 20,0), 2) nx.set_edge_attributes (г, dict_d, выбираются «задержка») # Instantiate проб = pulp.LpProblem ( «кратчайший путь Проблема», pulp.LpMinimize) стоимость = nx.get_edge_attributes (г, «задержки») # двоичных переменных утверждать ссылку или нет var_dict = {} для (I, J) в g.edges: х = pulp.LpVariable ( "х _ (% S_% s)" % (I, J), кошка = pulp.LpBinary) var_dict [я, как получить значимый путь в качестве вывода? Прекратить обратные дуги от принимающего значения? Получить путь как-то из выходных я получаю сейчас?
Niloy Saha
1

голосов
1

ответ
0

Просмотры

Как просматривать динамически генерируемые Pulp уравнений

Я сформулировал LP с динамически генерируемых ограничений и уравнений. Как я могу просмотреть все уравнения и ограничения, чтобы генерируемый? Посмотрел в документации не нашел никаких ссылок.
Manish
1

голосов
1

ответ
2.2k

Просмотры

Python Целлюлозно Линейная программа Integer с динамическим ограничением

Я хочу решить целочисленные линейную программу со следующей целевой функцией: J = максимизации (f1 (х) + f2 (х)) с учетом ограничения: стоимости (х)
CentAu
1

голосов
1

ответ
702

Просмотры

Pulp: минимальные и максимальные пороговые значения для ограничений lpSum

У меня есть большая линейная модель программирования, я пытаюсь решить с мякотью. Пока все идет хорошо, кроме я врезался в препятствие при попытке установки минимальных и максимальных значений для каждой «строки» в моей переменной Dict. В приведенном ниже примере, Я хотел бы иметь минимальное и максимальное количество животных в каждой области, как указано. Имена переменных были изменены на «собак» и «кошек» для упрощения импорта целлюлозы как пар линий вероят = lp.LpProblem ( «тест» проблемы, lp.LpMaximize) # на самом деле у меня есть 20000 площади области = [1, 2, 3] затраты = {1: 300, 2: 310, 3: 283} собаки = {1: 150, 2: 300, 3: 400} # Максимальное количество кошек на площадь кошек = {1: 400, 2: 140, 3: 0} # минимальные собаки в области min_dogs = {1: 50, 2: 5, 3: 80} # мин кошек на площадь min_cats = {1: 5, 2: 24, 3: 0} = lp.LpProblem проб ( "Пример для СО", lp.LpMinimize) # Настройка переменных dog_vars = lp.LpVariable.dicts ( '' собаки, собаки, 0) = cat_vars lp.LpVariable.dicts ( 'кошки' , кошки, 0) # Цель: Prob + = lp.lpSum ([затрат [я] * (dog_vars [I] + cat_vars [I]) для I в областях]) # ограничений PROB + = lp.lpSum ([затрат [ я] * (dog_vars [I] + cat_vars [I]) для I в областях]) = 0 PROB + = lp.lpSum ([cat_vars [I] - min_cats [I] для я у кошек])> = 0 проб. решения () печать ( "Status:", lp.LpStatus [prob.status]) для V в prob.variables (): печать (v.name, "=", v.varValue) печать ( "Общее кол км к быть сделано», lp.value (prob.objective)) результаты являются следующие. Этот вопрос должен быть значение для каждой из этих переменных не меньше, чем в min_cats и min_dogs. Он присваивается значение одной области для кошек и собак, а не распространять его. ( 'Статус:', 'Оптимальное') ( 'cats_1', '=', 0.0) ( 'cats_2', '=', 0.0) ( 'cats_3', '=', 29,0) ( 'dogs_1', «= », 0,0) ( 'dogs_2', '=', 0,0) ( 'dogs_3', '=', 135,0) ( 'Общее кол км быть сделано', 46412,0) [Законченный в 0.7s] Как я могу назначить мой минимальные и максимальные оценки на уровне строк?
dassouki
1

голосов
1

ответ
448

Просмотры

Что происходит с запуском скрипта Python, когда компьютер выключается?

Я бежал большие наборы данных с помощью кода, используя Pulp решатель в Python. Сам ЦКЗ решатель предпринимает очень много времени, чтобы решить проблему минимизации MILP, но это, как ожидается, как набор данных чрезвычайно велик. Мне удалось оставить свой компьютер в течение первых 12 часов запущенной программы, однако в конечном итоге мой ноутбук закрыт от разряженной батареи. К моему удивлению, когда я включил компьютер окно Python было еще открыто, и код по-прежнему работает. Я хотел бы знать, сделал перезагрузку программы, по-прежнему от того, где она была прервана, или я не должен подозревать, что он больше не работает? И только уточнить, я знаю, что программа работает Python correctly- возвращает правильный ответ для небольших подмножеств большого набора данных (это решает проблему в 16 минут на 85% от большого набора данных). Я'
ManvComp
1

голосов
1

ответ
433

Просмотры

Приближенное решение MILP с мякотью

Можно ли получить приближенное решение смешанной задачи целочисленного линейного программирования с мякотью? Моя проблема сложная и точная разрешение занимает слишком много времени.
Arnaud
1

голосов
1

ответ
159

Просмотры

Целлюлозно: Используя только один элемент в каждой группе

У меня есть dataframe панды, который имеет следующие значения: Имя Возраст Город Пункты 1 John 24 CHI 35 2 Mary 18 NY 25. , 80 Steve 30 CHI 32 Я пытаюсь сформировать 5 человек группу, которая максимизирует сумму баллов. Я хотел бы иметь два ограничения: возраст и город. Максимальный возраст не должен превышать 110 лет и не может быть два человека, из тех же городов. На данный момент у меня есть сценарий, который максимизирует точки и принимает возрастное ограничение во внимание: х = pulp.LpVariable.dicts ( «х», df.index, кот = «Integer», lowBound = 0) моды = pulp.LpProblem ( "прог", pulp.LpMaximize) objvals_p = {IDX: (DF [ 'Points'] [IDX]) для IDX в df.index} Mod + = сумма ([х [IDX] * objvals_p [IDX] для IDX в df.index]) objvals_a = {IDX: (DF [ 'Возраст'] [IDX]) для IDX в df.index} Mod + = целлюлозы. lpSum ([х [IDX] * objvals_a [IDX] для IDX в df.index]) <110 Однако я не могу понять, как добавить город ограничение в мой сценарий. Любые советы для меня? Спасибо!
jnie
1

голосов
1

ответ
395

Просмотры

Python, Pulp: Превращение LpVariable в целое число

Я пытаюсь напечатать значение переменной, определяемой как LpVariable (Pulp 1.6.1, Python 3.5). LpVariable имеет возможность установить категорию параметра «Integer». Однако, это не приводит к значению, когда я задаю переменную для печати. Таким образом часть проблемы я пытаюсь решить: из целлюлозы импорта * вероит = LpProblem ( «Gadget производство», LpMinimize) # Demand схема х (ноутбуки), у (телефоны) и г (таблетки) х = [75, 125, 1000, 1500] у = [120, 2000, 2000, 2000] г = [50, 2000, 3000, 2000] PL1 = LpVariable ( 'Prod Laptop января', кот = INT) PL2 = LpVariable ( 'Prod Laptop февраля », кот = INT) PL3 = LpVariable ( 'Prod Laptop марта', кот = INT) ПП1 = LpVariable ( 'Prod Телефон январь', кот = INT) PP2 = LpVariable ( 'Prod Телефон февраль', кот = целое) РР3 = LpVariable (»
Jeroen
1

голосов
1

ответ
84

Просмотры

Integer программа линейного программирования не так, как ожидалось

У меня есть следующие задачи целочисленного линейного программирования, который присваивает значения, как и ожидалось, но когда я добавляю некоторые ограничения, целевая функция, кажется, становится бессодержательным. Я не уверен, что сделать из него. Я использую Python, чтобы решить эту проблему. Номера незаполненных препарат score12 = 1 score21 = 1 C = 1 млн разворачивания: (W12 - S12) * score12 + (W21 - S21) * score21 при условии: d12 = х2 - х1 d21 = х1 - х2 D12 - W12 * С 0 d12 + S12 * С> = 0 D21 + S21 * С> = 0 0
chibro2
1

голосов
1

ответ
464

Просмотры

Линейная оптимизация смеси программирования салата с пульпой

Я настроил следующую задачу ЛП, и все, кажется, работает для моего процента массового ограничения для зеленого салата, за исключением. Я хочу, чтобы масса зеленого салата, по крайней мере 40%, но я получаю ошибку синтаксиса с lpSum Pulp, и я не знаю, как примирить это. Я имею следующие ограничения для каждого салата: • По меньшей мере 15 грамм белка; • По крайней мере, 2 и не более 8 грамм жира; • По крайней мере, 4 грамма углеводов; • В большинстве 200 миллиграммов натрия; • По меньшей мере, 40% листовая зелень по массе. из целлюлозы импорта * # Создает список Ингредиенты = [ «ТОМАТА», «Lettuce», «ШПИНАТОМ», «МОРКОВЬ», «ПОДСОЛНЕЧНИКА», «Тофу», «нут», «OIL»] ккал = {» ТОМАТНЫЙ ': 21, 'САЛАТ': 16, 'ШПИНАТ': 40' LpStatus [prob.status]) # Каждые из переменных печатаются с его решен оптимальным значением V в prob.variables (): печать (v.name, «=», v.varValue) # Оптимизированное значение целевой функции распечатываются к трафаретной печати ( «Total Ккали ингредиенты в салат =», значение (prob.objective)) Это ограничение, которое дает мне вопрос: Пробы + = lpSum (prob.variables () [2] .varValue + пробы. переменные () [4] .varValue) / lpSum ([prob.variables () [I] .varValue для я в диапазоне (8)])> = 0,40, "GreensRequirement" Это дает ошибку для использования оператора + на NoneType , поскольку переменные не имеют значения еще. Я просто не знаю точно, как настроить ограничение такого рода. Я посмотрел через пульпу документы по этому вопросу, но у меня не было никакой удачи, выясняя вопрос. LpStatus [prob.status]) # Каждые из переменных печатаются с его решен оптимальным значением V в prob.variables (): печать (v.name, «=», v.varValue) # Оптимизированное значение целевой функции распечатываются к трафаретной печати ( «Total Ккали ингредиенты в салат =», значение (prob.objective)) Это ограничение, которое дает мне вопрос: Пробы + = lpSum (prob.variables () [2] .varValue + пробы. переменные () [4] .varValue) / lpSum ([prob.variables () [I] .varValue для я в диапазоне (8)])> = 0,40, "GreensRequirement" Это дает ошибку для использования оператора + на NoneType , поскольку переменные не имеют значения еще. Я просто не знаю точно, как настроить ограничение такого рода. Я посмотрел через пульпу документы по этому вопросу, но у меня не было никакой удачи, выясняя вопрос. статус]) # Каждые из переменных печатаются с его решен оптимальным значением V в prob.variables (): печать (v.name, «=», v.varValue) # Оптимизированное значение целевой функции выводится на экране печать ( "Общее ккал ингредиентов в салате =", значение (prob.objective)) Это ограничение, которое дает мне вопрос: PROB + = lpSum (prob.variables () [2] .varValue + prob.variables () [ 4] .varValue) / lpSum ([prob.variables () [I] .varValue для я в диапазоне (8)])> = 0,40, "GreensRequirement" Это дает ошибку для использования оператора + на NoneType, так как переменные не имеет значения еще. Я просто не знаю точно, как настроить ограничение такого рода. Я посмотрел через пульпу документы по этому вопросу, но у меня не было никакой удачи, выясняя вопрос. статус]) # Каждые из переменных печатаются с его решен оптимальным значением V в prob.variables (): печать (v.name, «=», v.varValue) # Оптимизированное значение целевой функции выводится на экране печать ( "Общее ккал ингредиентов в салате =", значение (prob.objective)) Это ограничение, которое дает мне вопрос: PROB + = lpSum (prob.variables () [2] .varValue + prob.variables () [ 4] .varValue) / lpSum ([prob.variables () [I] .varValue для я в диапазоне (8)])> = 0,40, "GreensRequirement" Это дает ошибку для использования оператора + на NoneType, так как переменные не имеет значения еще. Я просто не знаю точно, как настроить ограничение такого рода. Я посмотрел через пульпу документы по этому вопросу, но у меня не было никакой удачи, выясняя вопрос. ы решена оптимальное значение для V в prob.variables (): печать (v.name, «=», v.varValue) # Оптимизированное значение целевой функции выводится на экране печать ( «Total ккал Ингредиенты на салат =», значение (prob.objective)) Это ограничение, которое дает мне вопрос: Prob + = lpSum (prob.variables () [2] .varValue + prob.variables () [4] .varValue) / lpSum ([проб. переменные () [я] .varValue для я в диапазоне (8)])> = 0,40, «GreensRequirement» Это дает ошибку для использования оператора + на NoneType, поскольку переменные не имеют значения еще. Я просто не знаю точно, как настроить ограничение такого рода. Я посмотрел через пульпу документы по этому вопросу, но у меня не было никакой удачи, выясняя вопрос. ы решена оптимальное значение для V в prob.variables (): печать (v.name, «=», v.varValue) # Оптимизированное значение целевой функции выводится на экране печать ( «Total ккал Ингредиенты на салат =», значение (prob.objective)) Это ограничение, которое дает мне вопрос: Prob + = lpSum (prob.variables () [2] .varValue + prob.variables () [4] .varValue) / lpSum ([проб. переменные () [я] .varValue для я в диапазоне (8)])> = 0,40, «GreensRequirement» Это дает ошибку для использования оператора + на NoneType, поскольку переменные не имеют значения еще. Я просто не знаю точно, как настроить ограничение такого рода. Я посмотрел через пульпу документы по этому вопросу, но у меня не было никакой удачи, выясняя вопрос. varValue) # Оптимизированное значение целевой функции выводятся на экране печать ( «Total ккал Ингредиенты на салат =», значение (prob.objective)) Это ограничение, которое дает мне вопрос: Пробы + = lpSum (prob.variables () [2] .varValue + prob.variables () [4] .varValue) / lpSum ([prob.variables () [I] .varValue для я в диапазоне (8)])> = 0,40, "GreensRequirement" Это выдает ошибку для использования оператора + на NoneType, поскольку переменные не имеют значения еще. Я просто не знаю точно, как настроить ограничение такого рода. Я посмотрел через пульпу документы по этому вопросу, но у меня не было никакой удачи, выясняя вопрос. varValue) # Оптимизированное значение целевой функции выводятся на экране печать ( «Total ккал Ингредиенты на салат =», значение (prob.objective)) Это ограничение, которое дает мне вопрос: Пробы + = lpSum (prob.variables () [2] .varValue + prob.variables () [4] .varValue) / lpSum ([prob.variables () [I] .varValue для я в диапазоне (8)])> = 0,40, "GreensRequirement" Это выдает ошибку для использования оператора + на NoneType, поскольку переменные не имеют значения еще. Я просто не знаю точно, как настроить ограничение такого рода. Я посмотрел через пульпу документы по этому вопросу, но у меня не было никакой удачи, выясняя вопрос. PROB + = lpSum (prob.variables () [2] .varValue + prob.variables () [4] .varValue) / lpSum ([prob.variables () [I] .varValue для я в диапазоне (8)]) > = 0,40, «GreensRequirement» Это дает ошибку для использования оператора + на NoneType, поскольку переменные не имеют значения еще. Я просто не знаю точно, как настроить ограничение такого рода. Я посмотрел через пульпу документы по этому вопросу, но у меня не было никакой удачи, выясняя вопрос. PROB + = lpSum (prob.variables () [2] .varValue + prob.variables () [4] .varValue) / lpSum ([prob.variables () [I] .varValue для я в диапазоне (8)]) > = 0,40, «GreensRequirement» Это дает ошибку для использования оператора + на NoneType, поскольку переменные не имеют значения еще. Я просто не знаю точно, как настроить ограничение такого рода. Я посмотрел через пульпу документы по этому вопросу, но у меня не было никакой удачи, выясняя вопрос.
123
1

голосов
1

ответ
409

Просмотры

Как использовать внешние данные в целевой функции в Python Целлюлозно?

Я хочу, чтобы выбрать квадрат фиксированного размера подмножество квадратной матрицы, так что сумма матрицы подмножества минимизирована. Некоторый код: импорт Намп в н.п. импорта целлюлозы четкости subset_matrix (данные, INDS): возвращает данные [np.ix_ (аким, INDS)] A = np.random.random ((10, 10)) индексы = список (диапазон (Len (А))) = pulp.LpProblem проб ( "Минимальное подмножество", pulp.LpMaximize) х = pulp.LpVariable.dicts ( 'элем', индексы, lowBound = 0, upBound = 1, кошка = pulp.LpInteger) PROB + = pulp.lpSum (subset_matrix (А, [х [я] для я в индексах])) prob.solve () Это терпит неудачу, потому что NumPy индексирование не нравится аким будучи список LpVariables. Это можно обойти? Как я могу сделать пульпы ограничения содержат Numpy массив просмотровых?
naught101
1

голосов
1

ответ
93

Просмотры

Python - Вызов Словарь ж / 2 ключей

У меня есть словарь с 2 ключами (I и J), которые являются такими же, как индексы в кадре данных. Пример кадра данных - требования к различным я и J спариваний. Спрос IJ 0 1 0 13 2 24 0 3 68 0 4 92 0 5 0 72 6 11 0 12 0 7 8 9 6 0 4 0 10 3 1 1 0 1 2 11 1 3 15. , , идти двутавровых от 0 до 9 и повторите Джея для каждого я от 1 до 10. Словарь для заказов, принятых был построен от этого спроса как такового: bookingsaccepted = pulp.LpVariable.dicts ( «bookingsaccepted», ((I, J ) для I, J в demand.index), lowBound = 0, кот = 'Integer') И теперь я пытаюсь ссылаться на значения в бронирований принятых словарем. Я пытаюсь установить ограничение в пульпе, так что все пары (I, J), где I = 0 суммируются вместе. Я использую это, но он не работает, и я могу» т понять, почему. Модель + = pulp.lpSum ([bookingsaccepted [(0, к)] для J в demand.index])
user3242036
1

голосов
1

ответ
294

Просмотры

Не удается установить Целлюлозно в Anaconda, unsatisfiableError

Привет им пытаются установить Целлюлозно в Anaconda и, очевидно, я гугле это, так что я знаю, что вы должны просто написать: Конда установить -c мякоти праймер писать это в Anaconda я получаю: Загрузка метаданных пакета ....... Решение технических packackage: , а затем ошибка выскакивает: unsatisfiableError: было найдено следующее specificantios быть в конфликте: - мякоть -> Python 2.7 * - питон 3.6 * Что проблема оленьей кожи мякоти работы для Python 3?
A.Salehi
1

голосов
1

ответ
75

Просмотры

Как я могу изменить свой сценарий так, что сводит к минимуму затраты, и в то же время рассчитывает объем и вес выбран жизнеспособны?

Я создал функцию пульпы, используя который принимает в массив элементов и грузовых автомобилей. Каждый элемент имеет емкость, и каждый грузовик имеет емкость и стоимость. Я использовал решатель целлюлозы для расчета минимального количества машин, требуемых, в то время сохраняя минимальную стоимость. Сдерживающим фактором является способность и оптимизируя фактором является стоимость бен. Но теперь, я хочу добавить еще один сдерживающий фактор объема. Можно ли это сделать? Можете ли вы предложить способ сделать это с помощью самого решателя ?? Я пытаюсь сделать эту часть без использования решателя, но это не помогает вообще. Большое спасибо. Я пытался создать функцию, которая заменяет минимальный грузовик со следующим по величине грузовика, когда я получаю сообщение «Trucks не достаточный» UPDATE: @kabdulla помог мне получить ответ, но также отметил, что у него есть большой недостаток, что он принимает во внимание только весь объем предметов, а не геометрии элементов, чтобы поместиться внутри; 2 х 2 х 2 пункт должен поместиться в грузовике легко, но 8 X 1 X 1 имеют различную геометрию и имеют различные ограничения. Вот мой обновленный код (все благодаря @kabdulla) с товаром и грузовых деталей. из целлюлозы импорта * импорта NumPy, как детали нп # Пункт item_name = [ "Mudguard1", "Mudguard2", "Mudguard3", "Mudguard4",] item_id = [ "1001474185", "1001474401", "1001474182", "1001474154"] item_length = [14,22,16,16] item_breadth = [12,24,14,12] item_height = [9,26,12,17] item_quantity = [14,8,10,1] item_vol = [12.25,63.55 , 15.55,1.88] item_mass = [160,528,83,
Rohit Kumar
0

голосов
0

ответ
11

Просмотры

CPLEX в Python - Student License

Я скачал CPLEX студию 12.8 с лицензией студента и попытаться соединить его с мякотью в питоне. Хотя есть некоторые люди на стеке, которые также имели проблемы с установкой CPLEX вверх в питоне, ответы не могли бы мне помочь. Мой CPLEX подкаталоги включают в себя только папки, которые называются «примером». Нет файла setup.py не входит. Это как каталоги выглядеть следующим образом: А в каталоге питона: В примерах файла есть только примеры проблемы. Ли я установить CPLEX студию правильно? Как я могу настроить CPLEX в мякоти?
Peter Dieter
1

голосов
2

ответ
277

Просмотры

Ошибка отвергая оптимальное решение с использованием Python Целлюлозно

У меня есть следующие задачи оптимизации: при условии где = {0,1} (двоичных переменных). Когда я реализую это в Pulp, как: из целлюлозы импорт * x1 = pulp.LpVariable ( 'x1', кошка = LpBinary) х2 = pulp.LpVariable ( 'x2', кот = LpBinary) x3 = pulp.LpVariable ( 'x3', кошка = LpBinary) x4 = pulp.LpVariable ( 'x4', кошка = LpBinary) = pulp.LpProblem проб ( 'x 1 + х2 + 2 * х3 + х4', pulp.LpMaximize) проб + = lpSum ([x1, x2, 2 * x3, x4]) + = проб lpSum ([x1, x2, x3, x4]) == 2 prob.solve () Я получаю решение, и. Тем не менее, я хотел бы запретить это решение, добавив еще одно ограничение, как и в Pulp как: Prob + = lpSum ([x1, x3]) <2 Но я не получаю хорошее решение в связи с тем, что у меня есть фиктивная переменная в prob.solve (). Должен ли я использовать другое ограничение или я делаю что-то не так?
RobinHood
1

голосов
2

ответ
383

Просмотры

Как выразить «не равно» отношения в линейном программировании?

Я хочу, чтобы решить задачу ЛП в Python с библиотекой Пульпе (или любой другой). Я хочу выразить ограничение о том, что все мои переменные должны иметь разные значения (их домен {0, 1, 2, 3 ... N} для заданного целого числа N.), что x_1! = X_2! = X_3. ..! = x_n. Решатель дает мне решение, когда я не добавить каких-либо ограничений, связанных с тем, что я выше упоминалось, но когда я делаю, это говорит мне о том, что система не представляется возможным, даже если она имеет одно решение. Для того, чтобы добавить «все разные» ограничения, я сделал следующее: для X_i в переменных: для X_j в переменных: если следующее ограничение не было уже добавлено и X_i = x_j: my_problem + = x_i - x_j> = 1 , «уникальное имя для ограничения» предыдущий код не работает. Когда я хочу, чтобы добавить ограничение x_i! = X_j, он просто не работает. Так,
Mourad Qqch
1

голосов
1

ответ
1.1k

Просмотры

PuLP: Objective Function: Adding multiple lpSum in a loop

I am trying to use PuLp for a Blending problem with different Elements (Iron, Mercury..). But instead of max/min some profit/cost I need to maximize the utilization of my constraints. So in Excel I had something like this (in pseudocode): max Sum (for each Element: (Sumproduct([DecisionVariables] * [Values]) / [MaximumAllowedValueForThisElement])) I never used an objective function like this but it seems to work in Excel. Now I want to model the same problem in PuLP. I think what I would need is somethink like this: for Element in ELEMENTS: prob += lpSum(DecisionVariable[Concentrate]*dic[Element][Concentrate]/ MaxAmount[Element] for Concentrate in CONCENTRATES) Where ELEMENTS is a List containing all Elements, CONCENTRATES is a List of Values from 0 to 100 and dic[Element][Concentrate] stores the values from each Element and all its concentrates. Now with the code above, the objective function is overwritten in each loop. Instead of overwriting the old objective function I'd need something like append() or alike to add each of the loops=lpSums to my prob variable?class? I am rather new to programming in general and I guess my problem is more related to my lack of python programming skills than my (also lacking :D) PuLP skills. But I could not find anything in the PuLP documentation, atleast nothing I could connect it to. Edit: Included a small table to showcase the problem: +------------------------------+-------------------------------------------+----+------------------------------+---------------+----------------------+---------------+---------------+-------------------------------+ | Utilization [%] | Sumproduct[Quantity] = [LHS] | | Constrains[Quantity] = [RHS] | Concentrate | Element 1 [%] | Element 2 [%] | Element 3 [%] | Decision Variables [Quantity] | +------------------------------+-------------------------------------------+----+------------------------------+---------------+----------------------+---------------+---------------+-------------------------------+ | u1 = z1 / MaxAmount Element1 | z1 = Col Element1 * Col Decison Variables |
JanB
1

голосов
1

ответ
105

Просмотры

PyCharm проект работает на «Выполнить», но pyinstaller --onefile дает ошибку, связанной с мякотью

Я работаю над проектом, где пользователь может загрузить файл для анализа через пульпу. Когда я запускаю проект в PyCharm он отлично работает, но после того, как я строю --onefile с pyinstaller ... Я получаю следующее отслеживающий исключения в Tkinter обратного вызова TraceBack (самый последний вызов последнего): Файл «TkInter \ __ init__.py», линия 1702, в __call__ Файл "example.py", строка 29, в get_file Файл "pydfs_lineup_optimizer \ lineup_optimizer.py", строка 351, в оптимизируют Файл "pydfs_lineup_optimizer \ решатели \ pulp_solver.py", строка 39, в решении файла «сайт -packages \ мякоть \ pulp.py», линия 1664, в решении AttributeError: объект„NoneType“не имеет атрибута„actualSolve“Вот кусок кода, который я имею вопрос с:
Chris Brocious
1

голосов
1

ответ
108

Просмотры

Pulp & монета или-CBC: Каково значение веса SOS?

При определении задачи линейного программирования смешанное целое с использованием целлюлозы, можно определить СОС следующим образом: x1 = LpVariable ( 'x1', кошка = LpInteger) х2 = LpVariable ( 'х2', кошка = LpInteger) prob.sos1 [ 'Sos'] = х1 + х2 * 2 (ый «Сос», или специально упорядоченное множество, является особым ограничением указав, что только одна переменных в наборе может быть отличными от нуля). Мы видим, что это позволяет задать весовые коэффициенты для переменных Сосов (1,2 в данном случае). Предположительно они определяют приоритет каждой переменной, т.е. какие переменные позволяют быть ненулевым первым при ветвлении. Но как точно определены веса? Основная решатель монета или-CBC, и я не мог найти что-нибудь о том, как они используют веса SOS.
Ant6n
1

голосов
2

ответ
67

Просмотры

Добавить размер шага к линейной оптимизации

Я работает над проблемой смешивания аналогично примеру пульпы у меня есть этот Ограничить, чтобы убедиться, произведенное количество является искомой проб + = lpSum ([Кг [я] * deposit_vars [I] для я в депозит]) == 64, «KGRequirement» Но я также нужно добавить другое ограничение для Minimun значение, отличное от нуля, это происходит потому, что не очень удобно, что я считать, например, 0.002KG одного ингредиента, я должен принять либо 0, либо по крайней мере, 2 кг , следовательно, действительные случаи, например, 0, 2, 2,3, 6, 3,23. Я попытался сделать это следующим образом: при г на месторождении: Проб + = (KG [я] * deposit_vars [я] == 0) или (TM [я] * deposit_vars [я]> = 30) Но это не работает и это просто сделать проблему недопустимой EDIT Это мой текущий код: импорт целлюлозы из целлюлозы импорт * импорт панд в качестве пищи PD = [ «f1», «f2», «f3», «f4»] KG = [10,20,50 ,
1

голосов
1

ответ
39

Просмотры

Python ЦЕЛЛЮЛОЗНО массив умножения ограничение

Я пытаюсь запустить задачу оптимизации, который я не могу решить. Я новичок в Python. У меня есть dataframe с 8760 номерами (0 - 1). Мне нужно умножить каждую строку в этом массиве на коэффициент, а затем подвести этот массив. Эта сумма этого должна быть равна х, 50000, например. Образец моего кода. pp.prob = pp.LpProblem ( "P2g", pp.LpMinimize) SolarCap = pp.LpVariable ( "SolarCap", lowBound = 0) pp.prob + = SolarCap * 5 для I, J, в Перечислим (SolverWS [ 'Солнечный' ]): х = у * SolarCap х = х + х + pp.prob = х == P2gprod состояние = pp.prob.solve ()
Dante Powell
1

голосов
1

ответ
442

Просмотры

PuLP producing LP files that are solvable by command line CBC, but PuLP reports a undefined solution

I have the following LP file which is produced by PuLP: \* copynumber *\ Minimize OBJ: PenaltyTree_48 Subject To _C1: - A_0 + A_3 - over_0 = 0 _C11: - D_0 + D_3 - over_10 = 0 _C13: - N_0 + N_3 - over_12 = 0 _C15: - N_3 + N_7 - over_14 = 0 _C17: A_7 - B_7 - over_16 = 0 _C19: - A_7 + N_7 - over_18 = 0 _C20: - A_7 + N_7 + under_19 >= 0 _C21: C_7 - N_7 - over_20 = 0 _C23: B_7 - C_7 - over_22 = 0 _C25: B_3 - N_3 - over_24 = 0 _C27: A_3 - B_3 - over_26 = 0 _C29: - A_3 + N_3 - over_28 = 1.24660824696 _C41: A_7 + B_7 + C_7 + N_7 - over_40 = 9.80665154278 _C43: C_0 - over_42 = 2.06580795211 _C45: A_3 + B_3 + N_3 - over_44 = 7.1056670077 _C47: A_0 + B_0 + D_0 + N_0 - over_46 = 7.89518556411 _C49: - PenaltyTree_48 + 0.5 over_0 + 0.5 over_10 + 0.5 over_12 + 0.5 over_14 + 0.02 over_16 + 0.02 over_18 + 0.5 over_2 + 0.02 over_20 + 0.02 over_22 + 0.02 over_24 + 0.02 over_26 + 0.02 over_28 + 0.02 over_30 + 0.02 over_32 + 0.02 over_34 + 0.02 over_36 + 4 over_38 + 0.5 over_4 + 4 over_40 + 4 over_42 + 4 over_44 + 4 over_46 + 0.5 over_6 + 0.5 over_8 + 0.5 under_1 + 0.5 under_11 + 0.5 under_13 + 0.5 under_15 + 0.02 under_17 + 0.02 under_19 + 0.02 under_21 + 0.02 under_23 + 0.02 under_25 + 0.02 under_27 + 0.02 under_29 + 0.5 under_3 + 0.02 under_31 + 0.02 under_33 + 0.02 under_35 + 0.02 under_37 + 4 under_39 + 4 under_41 + 4 under_43 + 4 under_45 + 4 under_47 + 0.5 under_5 + 0.5 under_7 + 0.5 under_9 = 0 _C5: - C_0 + C_7 - over_4 = 0 _C7: - B_0 + B_3 - over_6 = 0 _C9: - B_3 + B_7 - over_8
Ian Fiddes
4

голосов
1

ответ
196

Просмотры

рассол не играет хорошо с мякотью

Я работаю в Python 2.7 и с использованием библиотеки Pulp для установки проблемы. После того, как переменные, цели и ограничения определены, я замариновать мой объект LpProblem, чтобы отправлять на Solver в другом месте. При ун-засолке моей проблемы, я заметил, что все переменные дублируются: импорт целлюлоза импорта рассол PROB = pulp.LpProblem ( «тестовой задачи», pulp.LpMaximize) х = pulp.LpVariable ( «х», 0, 10) у = pulp.LpVariable ( 'у', 3, 6) проб + = х + у + = проб х >> печать проб тестовой задачи: MAXIMIZE 1 * х + 1 * Y + 0 В СООТВЕТСТВИИ С _C1: х
Mike
0

голосов
0

ответ
2

Просмотры

Relating constraints with objective in PULP

Я пытаюсь решить проблему MIP. Я пытаюсь найти количество экзаменов, которые будут сделаны по каждой технологии на сегодняшний день в течение недели, минимизируя общее время, затрачиваемое закончить спрос. У меня есть спрос, время, затраченные каждая тека, список санитаров и т.д. в отдельных dataframes. Я могу найти число экзаменов, чтобы минимизировать цели, однако я хотел бы добавить ограничение максимального числа санитаров, которые будут использоваться в качестве 8. Я добавил некоторые бинарные переменные, чтобы добавить условие, однако я не могу связать его с целевой функцией. Ниже мой код до сих пор: модель = pulp.LpProblem ( "Время минимизации проблемы", pulp.LpMinimize) мощность = pulp.LpVariable.dicts ( "емкость", ((examdate, techname, область) для examdate, techname, регион в tech_data_new.index), lowBound = 0, ) == я), shiftname] .item () И это двоичные переменные, я пытался добавить, но не могли бы быть связаны с целью, как умножение будет сделать его нелинейным. Techs = pulp.LpVariable.dicts ( "санитаров", (techname для techname в tech_data_new.index.get_level_values ​​( 'Технолог Name'). Уникальный ()), кот = 'Двоичный') "день дней = pulp.LpVariable.dicts ( »(examdate для examdate в tech_data_new.index.get_level_values ​​( 'экзамен Дата'). уникальный ()), кот = 'Двоичный') Любой провод будет оценен. Заранее спасибо. Пожалуйста, дайте мне знать, если любая другая поддержка необходима. т связаны с целью, как умножение будет сделать его нелинейным. Techs = pulp.LpVariable.dicts ( "санитаров", (techname для techname в tech_data_new.index.get_level_values ​​( 'Технолог Name'). Уникальный ()), кот = 'Двоичный') "день дней = pulp.LpVariable.dicts ( »(examdate для examdate в tech_data_new.index.get_level_values ​​( 'экзамен Дата'). уникальный ()), кот = 'Двоичный') Любой провод будет оценен. Заранее спасибо. Пожалуйста, дайте мне знать, если любая другая поддержка необходима. т связаны с целью, как умножение будет сделать его нелинейным. Techs = pulp.LpVariable.dicts ( "санитаров", (techname для techname в tech_data_new.index.get_level_values ​​( 'Технолог Name'). Уникальный ()), кот = 'Двоичный') "день дней = pulp.LpVariable.dicts ( »(examdate для examdate в tech_data_new.index.get_level_values ​​( 'экзамен Дата'). уникальный ()), кот = 'Двоичный') Любой провод будет оценен. Заранее спасибо. Пожалуйста, дайте мне знать, если любая другая поддержка необходима. кот = 'Бинарные') дней = pulp.LpVariable.dicts ( "день", (examdate для examdate в tech_data_new.index.get_level_values ​​( 'Экзамен Дата'). Уникальный ()), кот = 'Двоичный') Любой провод будет оценили. Заранее спасибо. Пожалуйста, дайте мне знать, если любая другая поддержка необходима. кот = 'Бинарные') дней = pulp.LpVariable.dicts ( "день", (examdate для examdate в tech_data_new.index.get_level_values ​​( 'Экзамен Дата'). Уникальный ()), кот = 'Двоичный') Любой провод будет оценили. Заранее спасибо. Пожалуйста, дайте мне знать, если любая другая поддержка необходима.
user8996561
5

голосов
1

ответ
3.7k

Просмотры

How to set MIP start (initial solution) with Gurobi solver from PuLP?

I'm using the PuLP module in Python to formulate a mixed integer program. I am trying to work out how to set a MIP start (i.e. a feasible solution for the program to start from) via the PuLP interface. Details on how to set MIP start are given here And the developer of the PuLP package claims that you can access the full Gurobi model via the PuLP interface here Pasted below are two complete models. I have made these as small as possible whilst preventing the gurobi solver from finding the optimal value using a heuristic. I have attempted to set an initial solution (to the optimal values) in both models, but in the PuLP model it is ignored, but in the gurobipy model it works as expected. How do you set an initial solution for the Gurobi solve via the PuLP interface? from pulp import * prob = LpProblem("min example",LpMinimize) x1=LpVariable("x1",0,None,LpInteger) x2=LpVariable("x2",0,None,LpInteger) x3=LpVariable("x3",0,None,LpInteger) x4=LpVariable("x4",0,None,LpInteger) # Objective function prob += 3*x1 + 5*x2 + 6*x3 + 9*x4 # A constraint prob += -2*x1 + 6*x2 -3*x3 + 4*x4 >= 2, "Con1" prob += -5*x1 + 3*x2 + x3 + 3*x4 >= -2, "Con2" prob += 5*x1 - x2 + 4*x3 - 2*x4 >= 3, "Con3" # Choose solver, and set it to problem, and build the Gurobi model solver = pulp.GUROBI() prob.setSolver(solver) prob.solver.buildSolverModel(prob) # Attempt to set an initial feasible solution (in this case to an optimal solution) prob.solverModel.getVars()[0].start = 1 prob.solverModel.getVars()[1].start = 1 prob.solverModel.getVars()[2].start = 0 prob.solverModel.getVars()[3].start = 0 # Solve model prob.solve() # Status of the solution is printed to the screen print "Status:", LpStatus[prob.status] # Each of the variables is printed with it's resolved optimum value for v in prob.variables(): print v.name, "=", v.varValue # Optimised objective function value is printed to the screen print "OF = ", value(prob.objective) Which returns: Optimize a model with 3 rows, 4 columns and 12 nonzeros Coefficient statistics: Matrix range [1e+00, 6e+00] Objective range [3e+00, 9e+00] Bounds range [0e+00, 0e+00] RHS range [2e+00, 3e+00] Found heuristic solution: objective 12 Presolve removed 0 rows and 1 columns Presolve time: 0.00s Presolved: 3 rows, 3 columns, 9 nonzeros Variable types: 0 continuous, 3 integer (0 binary) Root relaxation: objective 7.400000e+00, 1 iterations, 0.00 seconds Nodes | Current Node | Objective Bounds | Work Expl Unexpl | Obj Depth IntInf | Incumbent BestBd Gap | It/Node Time 0 0 7.40000 0 1 12.00000 7.40000 38.3% - 0s H 0 0 8.0000000 7.40000 7.50% - 0s Explored 0 nodes (1 simplex iterations) in 0.00 seconds Thread count was 8 (of 8 available processors) Optimal solution found (tolerance 1.00e-04) Best objective 8.000000000000e+00, best bound 8.000000000000e+00, gap 0.0% ('Gurobi status=', 2) Status: Optimal x1 = 1.0 x2 = 1.0 x3 = -0.0 x4 = -0.0 OF = 8.0 Secondly I can implement the same model using the gurobipy module, but in this case the MIP start is actually used: from gurobipy import * m = Model("min example") m.modelSense = GRB.MINIMIZE objFcnCoeffs = [3, 5, 6, 9] xVars = [] for i in range(4): xVars.append(m.addVar(vtype=GRB.INTEGER, obj=objFcnCoeffs[i], name="Open%d" % i)) # Update model to integrate new variables m.update() # Constraints m.addConstr(-2*xVars[0] + 6*xVars[1] -3*xVars[2] + 4*xVars[3] >= 2, "Con1") m.addConstr(-5*xVars[0] + 3*xVars[1] + xVars[2] + 3*xVars[3] >= -2, "Con2") m.addConstr(5*xVars[0] - xVars[1] + 4*xVars[2] - 2*xVars[3] >= 3, "Con3") # Attempt to set an initial feasible solution (in this case to an optimal solution) startValues = [1, 1, 0, 0] for i in range(4): xVars[i].start = startValues[i] # Solve model m.optimize() # Print solution print('\nTOTAL COSTS: %g' % m.objVal) for i in range(4): print('\n xVar[%s] = %g' % i, xVars[i]) Which returns: Optimize a model with 3 rows, 4 columns and 12 nonzeros Coefficient statistics: Matrix range [1e+00, 6e+00] Objective range [3e+00, 9e+00] Bounds range [0e+00, 0e+00] RHS range [2e+00, 3e+00] Found heuristic solution: objective 12 Presolve removed 0 rows and 1 columns Presolve time: 0.00s Presolved: 3 rows, 3 columns, 9 nonzeros Loaded MIP start with objective 8 Variable types: 0 continuous, 3 integer (0 binary) Root relaxation: infeasible, 0 iterations, 0.00 seconds Explored 0 nodes (0 simplex iterations) in 0.00 seconds Thread count was 8 (of 8 available processors) Optimal solution found (tolerance 1.00e-04) Best objective 8.000000000000e+00, best bound 8.000000000000e+00, gap 0.0% TOTAL COSTS: 8 xVar[0] = 1 xVar[1] = 1 xVar[2] = 0 xVar[3] = 0
kabdulla
2

голосов
1

ответ
353

Просмотры

Целлюлозно не вывода на печать на IPython ячейки

Я использую Pulp и IPython / Jupyter ноутбук для проекта. У меня есть следующие ячейки кода: модель импорта целлюлозы = pulp.LpProblem ( 'пример', pulp.LpMinimize) x1 = pulp.LpVariable ( 'x1', lowBound = 0, кошки = 'целое') х2 = pulp.LpVariable ( 'х2', lowBound = 0, кошка = модель + = -2 * x1 'целое') - 3 * х2 + модель = x 1 + 2 * х2
pbc1303
12

голосов
2

ответ
4.5k

Просмотры

Python Целлюлозно использования с матрицами

Я еще новичок в Python, после многих лет и лет Matlab. Я пытаюсь использовать Pulp создать целое линейную программу. Учитывая массив чисел: {Р [I]: = 1 ... N} Я хочу, чтобы максимизировать: сумму (x_i P_i) при ограничениях А х
user989803
2

голосов
1

ответ
1k

Просмотры

Двумерный Bin Packing

Я использую следующий Integer модель программирования для решения Dimensional упаковки Задачи два Bin. Следующая модель иллюстрирует одномерную версию. Код, который я написал включает ограничения для дополнительного измерения. Я использую Python кевлар для решения задачи оптимизации. Код выглядит следующим образом: от импорта целлюлозы проблема * #knapsack Защиту knapsolve (пункт):. = Проб LpProblem ( 'BinPacking', LpMinimize) YS = [(формат LpVariable "у {0}" (я + 1), кот = "Бинарные") для я в диапазоне (item.bins)] хз = [(формат LpVariable "х {0} {1}". (I + 1, J + 1), кошка = "Бинарные") для г в диапазоне (item.items) для J в диапазоне (item.bins)] #minimize объективные nbins = сумма (YS) проб + = nbins печати (nbins) #constraints т = nbins>
Kaustabha Ray
3

голосов
1

ответ
2.7k

Просмотры

Целлюлозно очень медленно при добавлении много ограничений

Я пытаюсь использовать жом, но это занимает 50 секунд, чтобы добавить 4000 ограничений (67 переменных). Решение проблемы только занимает доли секунды. Мы хотим использовать мякоти легко проверить несколько решателей на большом множестве проблем. Следует ли принимать Целлюлозно это долго? Использование PyGLPK непосредственно занимает лишь часть второй, включая как установки и решения, так что я надеюсь, что нет. Что я могу сделать, чтобы улучшить эффективность этого шага в Pulp? Обновление Моих ограничений матрица очень редка, и я был в состоянии сократить время установки до 4 или 5 секунд для этой конкретной проблемы, включая только ненулевые коэффициенты. Я до сих пор в состоянии написать свой собственный .lp или .mps отформатированный файл, решить проблему с CBC или glpsol подпроцессом и синтаксическим решением гораздо более эффективно, чем пульпа, просто потому, что я могу написать входной файл в течение нескольких миллисекунд, когда Целлюлозно занимает несколько секунд. Я до сих пор не знаю, почему это было бы.
jmilloy
3

голосов
1

ответ
2.4k

Просмотры

Binary целочисленное программирование с использованием вектора ЦЕЛЛЮЛОЗНО синтаксиса для переменных?

Новое в библиотеке питон МАССЫ и я найти документацию несколько бесполезен, так как она не включает в себя примеры использования списков переменных. Я попытался создать абсолютно минималистский пример ниже, чтобы проиллюстрировать мою растерянность. импорта целлюлозы идентификаторами = [ 'A', 'B', 'C', 'D', 'Е'] ЦЕНЫ = ДИКТ (ZIP (ИДЕНТИФИКАТОРЫ, [100.0, 99.0, 100.5, 101.5, 200.0])) N = LEN ( идентификаторы) х = pulp.LpVariable.dicts ( "х", индексирует = идентификаторы, lowBound = 0, upBound = 1, кошка = 'целого', indexStart = []) = pulp.LpProblem проб ( "Минималистский пример", целлюлоза. LpMaximize) PROB + = pulp.lpSum ([х [г] * цЕНЫ [I] для я в идентификаторах]), "Цель состоит сумма цен отдельных предметов" Prob + = pulp.lpSum ([х [I] для г в идентификаторах]) == 2, "
Peter Cotton
3

голосов
1

ответ
566

Просмотры

Как использовать переменную в качестве делителя в Pulp

Я пытался решить задачу ЛПА с ограничением, которое вычисляется путем деления переменных А с помощью переменного В. Простого варианта задачи, как показано ниже: Продукт производятся с использованием двух материалов (А и В)% А должно быть больше чем на 50%% в должна быть не менее 40% от общей суммы а и в 100 Цели: Какова минимальная сумма в а? Код, как: из целлюлозы импорт * PROB = LpProblem ( 'простая задача', LpMinimize) х = LpVariable ( 'х', 0, None, 'Integer') у = LpVariable ( 'у', 0, None, «Integer «) + = проб х проб + = х / (х + у)> 0,5 #
killua8p
6

голосов
2

ответ
2.7k

Просмотры

testing pulp installation fails

Следуя инструкции из http://www.coin-or.org/PuLP/main/installing_pulp_at_home.html#installation, я установил Целлюлозно с помощью «установки Windows из источника» Когда я попытался запустить тест на странице (инструкции на странице : «Для того, чтобы проверить, что вы мякоть установка работает правильно, пожалуйста, введите следующую команду в интерпретатор питона и обратите внимание, что вывод должен быть похож выход ниже, что можно было бы ожидать, если вы еще не установлены какие-либо другие решатели и CoinMP решатель в комплекте. с целлюлозными работ ") Мои результаты:. импорт целлюлозы pulp.pulpTestAll () Solver pulp.solvers.CPLEX_DLL недоступен. Решение pulp.solvers.CPLEX_CMD недоступен. Решение pulp.solvers.COIN_CMD недоступен. Решение pulp.solvers.COINMP_DLL недоступен. Решение pulp.solvers.GLPK_CMD недоступен. Решение pulp.solvers.XPRESS недоступен. Решение pulp.solvers.GUROBI недоступен. Согласно веб-странице, то это должно быть мой вывод: импорт целлюлозы pulp.pulpTestAll () Solver pulp.pulp.COIN_MEM недоступен. Решение pulp.pulp.COIN_CMD недоступен. (Штраф неограничена) * Solver pulp.pulp.COINMP_DLL прошло. Решение pulp.pulp.GLPK_MEM недоступен. Решение pulp.pulp.GLPK_CMD недоступен. Решение pulp.pulp.XPRESS недоступен. Я использую Python 2.7.1, 1.4.7 Целлюлозно на Windows 7 64 бит. Я предполагаю, что это происходит потому, что решатель CoinMP в комплекте с мякотью не работает. Я только начал работать на Python неделю назад, я просто любитель в программировании.
4

голосов
1

ответ
94

Просмотры

Понимание фрагменты кода Python / Pulp

Я должен принять существующий сценарий, где они использовали пакет мякоти. Мне нужно знать, как результат следующей строки выглядит следующим образом: блок = [ «один», «два», «три»] = время диапазон (10) состояние = LpVariable.dicts ( «статус», [(F, G ) для F в единицу для г во времени], 0,1, LpBinary) Как ключей / значений выглядит? статус [ "один"] = [0,1,1,1 ...]? Большое спасибо за Вашу помощь!
Matias

Просмотр дополнительных вопросов