От CVX до CVXPY или CVXOPT -- python поле с участием matlab поле с участием cvxopt поле с участием cvx поле с участием cvxpy пол Связанный проблема

From CVX to CVXPY or CVXOPT


9
vote

проблема

русский

Я пытался пройти какой-код из Matlab в Python. У меня такая же проблема с выпуклой оптимизацией, работающая на MATLAB, но у меня возникли проблемы, передавающие его в CVXPY или CVXOPT.

 <код> n = 1000; i = 20; y = rand(n,1); A = rand(n,i); cvx_begin variable x(n); variable lambda(i); minimize(sum_square(x-y)); subject to     x == A*lambda;     lambda >= zeros(i,1);     lambda'*ones(i,1) == 1; cvx_end   

Это то, что я пробовал с <сильным> python и cvxpy .

 <код> import numpy as np from cvxpy import *  # Problem data. n = 100 i = 20 np.random.seed(1) y = np.random.randn(n) A = np.random.randn(n, i)  # Construct the problem. x = Variable(n) lmbd = Variable(i) objective = Minimize(sum_squares(x - y)) constraints = [x == np.dot(A, lmbd),                lmbd <= np.zeros(itr),                np.sum(lmbd) == 1]  prob = Problem(objective, constraints)  print("status:", prob.status) print("optimal value", prob.value)   

Тем не менее, это не работает. У кого-нибудь из вас есть идеи, как сделать это работать? Я уверен, что моя проблема в <Щедах> ограничения . А также было бы неплохо иметь его с cvxopt.

Английский оригинал

I've been trying to pass some code from Matlab to Python. I have the same convex optimization problem working on Matlab but I'm having problems passing it to either CVXPY or CVXOPT.

n = 1000; i = 20; y = rand(n,1); A = rand(n,i); cvx_begin variable x(n); variable lambda(i); minimize(sum_square(x-y)); subject to     x == A*lambda;     lambda >= zeros(i,1);     lambda'*ones(i,1) == 1; cvx_end 

This is what I tried with Python and CVXPY.

import numpy as np from cvxpy import *  # Problem data. n = 100 i = 20 np.random.seed(1) y = np.random.randn(n) A = np.random.randn(n, i)  # Construct the problem. x = Variable(n) lmbd = Variable(i) objective = Minimize(sum_squares(x - y)) constraints = [x == np.dot(A, lmbd),                lmbd <= np.zeros(itr),                np.sum(lmbd) == 1]  prob = Problem(objective, constraints)  print("status:", prob.status) print("optimal value", prob.value) 

Nonetheless, it's not working. Does any of you have any idea how to make it work? I'm pretty sure my problem is in the constraints. And also it would be nice to have it with CVXOPT.

</div
              

Список ответов

6
 
vote
vote
Лучший ответ
 

Я думаю, что получил это, у меня было одно из ограничений неправильно =), я добавил случайное число семян для сравнения результатов и проверки, которые на самом деле одинаковы на обоих языках. Я оставляю данные здесь, так что, возможно, это полезно для кого-то когда-нибудь;)

matlab

 <код> rand('twister', 0); n = 100; i = 20; y = rand(n,1); A = rand(n,i); cvx_begin variable x(n); variable lmbd(i); minimize(sum_square(x-y)); subject to     x == A*lmbd;     lmbd >= zeros(i,1);     lmbd'*ones(i,1) == 1; cvx_end   

CVXPY

 <код> import numpy as np from cvxpy import *  # random seed np.random.seed(0)  # Problem data. n = 100 i = 20 y = np.random.rand(n) # A = np.random.rand(n, i)  # normal A = np.random.rand(i, n).T  # in this order to test random numbers  # Construct the problem. x = Variable(n) lmbd = Variable(i) objective = Minimize(sum_squares(x - y)) constraints = [x == A*lmbd,                lmbd >= np.zeros(i),                sum_entries(lmbd) == 1]  prob = Problem(objective, constraints) result = prob.solve(verbose=True)   

<Сильный> CVXOPT Ожидается .....

 

I think I got it, I had one of the constraints wrong =), I added a random seed number in order to compare the results and check that are in fact the same in both languages. I leave the data here so maybe this is useful for somebody someday ;)

Matlab

rand('twister', 0); n = 100; i = 20; y = rand(n,1); A = rand(n,i); cvx_begin variable x(n); variable lmbd(i); minimize(sum_square(x-y)); subject to     x == A*lmbd;     lmbd >= zeros(i,1);     lmbd'*ones(i,1) == 1; cvx_end 

CVXPY

import numpy as np from cvxpy import *  # random seed np.random.seed(0)  # Problem data. n = 100 i = 20 y = np.random.rand(n) # A = np.random.rand(n, i)  # normal A = np.random.rand(i, n).T  # in this order to test random numbers  # Construct the problem. x = Variable(n) lmbd = Variable(i) objective = Minimize(sum_squares(x - y)) constraints = [x == A*lmbd,                lmbd >= np.zeros(i),                sum_entries(lmbd) == 1]  prob = Problem(objective, constraints) result = prob.solve(verbose=True) 

CVXOPT is pending.....

</div
 
 
   
   

Связанный проблема

16  Как преобразовать шестигранную строку в шестнадцатеричный номер?  ( How to convert hex string to hex number ) 
У меня есть целое число в бывшем. 16 И я пытаюсь преобразовать этот номер в шестнадцатеричный номер. Я пытался достичь этого, используя функцию Hex, но всякий...

51  Запросы Python «Пропасные зависимости от поддержки носков» при использовании SOCKS5 из терминала  ( Pythons requests missing dependencies for socks support when using socks5 fro ) 
Я пытаюсь взаимодействовать с API из My Python 2.7 Shell, используя пакет, который опирается на запросы Python. Вещь - это удаленный адрес блокируется моей се...

2  Добавьте номера в шестнадцатеричном базе без конвертации баз?  ( Add numbers in hexadecimal base without converting bases ) 
Мне нужно написать функцию, которая получает два числа в шестнадцатеричном базе, и вычисляет сумму обоих из них, мне не разрешено преобразовывать их в десятич...

0  Объедините несколько столов для ответа JSON в Django Read Framework  ( Combine multiple tables for a json response in django rest framework ) 
Я использую Django Read Framework для моего serializers . Мне нужно создать веб-сервис, который сочетает в себе поля в трех таблицах и дает JSON. У меня ес...

0  Почему этот сценарий Python работает на Ubuntu, но не распачин?  ( Why does this python script work on ubuntu but not raspbian ) 
Друг, и я создал следующий скрипт, использующий BeautifulSoup, чтобы получить HTML страницы работы, а затем добавить работу на массив, затем файл, затем отпра...

1  Как мне позвонить в родительский класс в подклассе?  ( How do i call on a parent class in a subclass ) 
Мне нужно создать вызов несвязанного метода, чтобы установить имя и листья, и я не знаю, как. Любая помощь ценится. Мой код: <код> class Plant(object): ...

0  NameError: Имя «Домашние животные» не определены. Питон  ( Nameerror name pets is not defined python ) 
Это код, который я использую, но каждый раз, когда я пытаюсь запустить его, я получаю эту ошибку в терминале: <код> Traceback (most recent call last): Fil...

1  Где многопроцессор  ( Where is multiprocessing process ) 
Я портирую рабочее приложение из Python 3.3-34 и столкнулся с странной ситуацией. Класс Multipressing.Process отсутствует в загрузке с Python.org. Вместо этог...

0  Запрос доступа от класса Inherit (View)  ( Access request from inherit class view ) 
Как я могу предъявить запрос на var, если я не реализую методы Get / Post из класса Inherit (View)? <код> class Base(View): def __init__(self): ...

1  Нахождение корней с Scipy.Optimize.root  ( Finding roots with scipy optimize root ) 
Я пытаюсь найти root y функции, называемой f с помощью python. Вот мой код: <код> def f(y): w,p1,p2,p3,p4,p5,p6,p7 = y[:8] t1 = w - 0.500371726*...

5  Как я могу получить Mercurial для того, чтобы снова выдвигать коммиты?  ( How can i get mercurial to push commits again ) 
Я не знаю, что я ничего изменил и работаю Ubuntu 10.10. Mercurial работает нормально, а затем внезапно, когда я начал толкать сегодня утром, я начал получать ...

-4  Как суммировать значения при заворачивании аналогичного ключа, чтобы построить Dict  ( How to sum values when zipping similar key to build a dict ) 
У меня есть <код> A = [a, b, c, d, a, d, c] и <код> B=[1, 2, 3, 4, 5, 6, 7] Почему <код> dict(zip(A,B)) не возвращается <код> {'a': 6, 'b': 2, 'c': 10, '...

0  После добавления клеток найдите мин и максимум пяти различных категорий в файле CSV  ( After appending cells find min and max of five different categories in a csv fi ) 
Привет всем У меня есть вопрос. Я просто сейчас изучаю мин и макс. У меня проблемы в нахождении мин и максимум пяти столбцов для каждой категории Вот, что...

0  Запустите сценарий Python в колбу  ( Run python script into flask ) 
У меня есть настольное приложение для обнаружения лиц, написанных в сценарии Python, используя OpenCV и Numpy. Я хочу поставить эти файлы Python в колбу и зап...

2  подмодул .POPEN отказывается запускать команду, хотя OS.System работает нормально  ( Submodules popen refuses to run a command even though os system works fine ) 
Всякий раз, когда я запускаю этот скрипт: <код> gcalctool0 Я постоянно получаю эту ошибку: <код> gcalctool1 Тем не менее, <код> gcalctool2 определе...

Связанный проблема

16  Как преобразовать шестигранную строку в шестнадцатеричный номер? 
51  Запросы Python «Пропасные зависимости от поддержки носков» при использовании SOCKS5 из терминала 
2  Добавьте номера в шестнадцатеричном базе без конвертации баз? 
0  Объедините несколько столов для ответа JSON в Django Read Framework 
0  Почему этот сценарий Python работает на Ubuntu, но не распачин? 
1  Как мне позвонить в родительский класс в подклассе? 
0  NameError: Имя «Домашние животные» не определены. Питон 
1  Где многопроцессор 
0  Запрос доступа от класса Inherit (View) 
1  Нахождение корней с Scipy.Optimize.root 
5  Как я могу получить Mercurial для того, чтобы снова выдвигать коммиты? 
-4  Как суммировать значения при заворачивании аналогичного ключа, чтобы построить Dict 
0  После добавления клеток найдите мин и максимум пяти различных категорий в файле CSV 
0  Запустите сценарий Python в колбу 
2  подмодул .POPEN отказывается запускать команду, хотя OS.System работает нормально 



© 2021 www.qaru.top All Rights Reserved. Q&A House все права защищены


Licensed under cc by-sa 3.0 with attribution required.