Có một bộ giải lập trình phi tuyến chất lượng cao cho Python không?


77

Tôi có một số vấn đề tối ưu hóa toàn cầu không lồi để giải quyết. Hiện tại tôi sử dụng Hộp công cụ tối ưu hóa của MATLAB (cụ thể là fmincon()với thuật toán = 'sqp'), khá hiệu quả . Tuy nhiên, hầu hết mã của tôi là bằng Python và tôi cũng muốn thực hiện tối ưu hóa trong Python. Có một bộ giải NLP với các ràng buộc Python có thể cạnh tranh fmincon()không? Nó phải

  • có thể xử lý các ràng buộc bất đẳng thức và bất đẳng thức
  • không yêu cầu người dùng cung cấp Jacobian.

Không sao nếu nó không đảm bảo tối ưu toàn cầu ( fmincon()không). Tôi đang tìm kiếm thứ gì đó hội tụ mạnh mẽ đến mức tối ưu cục bộ ngay cả đối với các vấn đề thách thức và ngay cả khi nó chậm hơn một chút fmincon().

Tôi đã thử một vài bộ giải có sẵn thông qua OpenOpt và thấy chúng kém hơn MATLAB fmincon/sqp.

Chỉ cần nhấn mạnh tôi đã có một công thức dễ điều khiển và một người giải quyết tốt. Mục tiêu của tôi chỉ đơn thuần là thay đổi ngôn ngữ để có một quy trình làm việc hợp lý hơn.

Geoff chỉ ra rằng một số đặc điểm của vấn đề có thể có liên quan. Họ đang:

  • 10-400 biến quyết định
  • 4-100 ràng buộc đẳng thức đa thức (mức độ đa thức nằm trong khoảng từ 1 đến khoảng 8)
  • Một số ràng buộc bất bình đẳng hợp lý bằng khoảng hai lần số lượng biến quyết định
  • Hàm mục tiêu là một trong các biến quyết định

Jacobian của các ràng buộc bình đẳng là dày đặc, cũng như Jacobian của các ràng buộc bất bình đẳng.


2
David, đây không may là một câu hỏi hoàn toàn khác :) Sự khác biệt giữa tối thiểu địa phương và toàn cầu là chủ đề của vô số tiến sĩ tiềm năng, và theo Định lý Không ăn trưa miễn phí, bất kỳ người giải quyết nào tốt cho một vấn đề tối ưu hóa toàn cầu chung là có thể xấu cho người khác. Tôi có thể đề nghị bạn bắt đầu bằng cách xem xét các tùy chọn công thức (Có dạng số nguyên hỗn hợp không? Có tồn tại xấp xỉ lồi không?)
Aron Ahmadia

David, Aron làm cho một điểm tốt. Công thức chắc chắn là chìa khóa trong việc thu được các giải pháp số của NLP không lồi, chứ chưa nói đến việc có được các giải pháp tốt một cách nhanh chóng. Có thể đáng để xem xét các công thức thay thế, và sau đó sử dụng cấu trúc của các công thức đó để hướng dẫn lựa chọn của bạn về người giải. Sử dụng một bộ giải khai thác bất kỳ cấu trúc nào (như độ thưa thớt, lập trình ngẫu nhiên nhiều giai đoạn, sử dụng các ràng buộc để tạo ra các vết cắt) mà bạn có thể tạo ra trong vấn đề của mình là chìa khóa để có được giải pháp tốt.
Geoff Oxberry

@DavidKetcheson: Vì bạn có một công thức mà bạn muốn sử dụng, ít nhất bạn có thể nhận xét về các đặc điểm của công thức của bạn không? Là người Jacob của Lagrangian dày đặc hay thưa thớt? Nó có bao nhiêu biến? Chúng tôi không có ích gì khi chúng tôi đề xuất phần mềm triển khai các phương pháp giải pháp không phù hợp với vấn đề của bạn và đó là lý do duy nhất mọi người nói về công thức ở nơi đầu tiên.
Geoff Oxberry

coopr cung cấp liên kết với ipopt bằng asl: ipopt
denfromufa

Câu trả lời:


32

fmincon(), như bạn đã đề cập, sử dụng một số chiến lược nổi tiếng trong tối ưu hóa phi tuyến, cố gắng tìm mức tối thiểu cục bộ mà không quan tâm nhiều đến việc liệu tối ưu toàn cầu đã được tìm thấy hay chưa. Nếu bạn ổn với điều này, thì tôi nghĩ bạn đã đặt câu hỏi chính xác (tối ưu hóa phi tuyến).

Gói tốt nhất tôi biết để tối ưu hóa phi tuyến nói chung là IPOPT [1]. Rõ ràng Matthew Xu duy trì một tập hợp các ràng buộc Python với IPOPT , vì vậy đây có thể là nơi để bắt đầu.

[1]: Andreas Wachter là một người bạn cá nhân, vì vậy tôi có thể hơi thiên vị.


Andreas làm rất tốt, nhưng người giải của anh ta cũng yêu cầu thông tin ma trận Jacobian (hoặc ít nhất, thông tin thưa thớt cho ma trận Jacobian). Khi bạn nói rằng bạn muốn một bộ giải không yêu cầu ma trận Jacobian, bạn có nghĩa là bạn muốn một bộ giải không yêu cầu bạn cung cấp ma trận Jacobian một cách phân tích (để tính toán sai phân hữu hạn sẽ đủ) hay bạn muốn một bộ giải hoàn toàn không yêu cầu thông tin ma trận Jacobian (điều này sẽ giới hạn bạn trong các phương pháp tối ưu hóa không có đạo hàm)?
Geoff Oxberry

Nắm bắt tốt. Ý tôi là trước đây; Tôi đã cập nhật câu hỏi.
David Ketcheson

Cuối cùng tôi đã có thể áp dụng IPOPT cho vấn đề của mình bằng sage.openopt.org . Thật tuyệt vời!
David Ketcheson

4
Hôm nay (2017) bạn cũng có thể sử dụng IPOPT trong máng Python Pyomo . Bạn nhận được một ngôn ngữ mô hình xoay vòng và tự động tìm khác biệt cho jacobian và hessian.
Antonello

@Antonello liên kết đã sửa là pyomo.org
Moonwalker

37

Tôi làm việc trong một phòng thí nghiệm tối ưu hóa toàn cầu các vấn đề hỗn hợp số nguyên và không lồi. Kinh nghiệm của tôi với các bộ giải tối ưu hóa nguồn mở là những cái tốt hơn thường được viết bằng ngôn ngữ được biên dịch và chúng có giá thấp hơn so với các gói tối ưu hóa thương mại.

Nếu bạn có thể hình thành vấn đề của mình như một hệ phương trình rõ ràng và cần một người giải miễn phí, thì cách tốt nhất của bạn có lẽ là IPOPT, như Aron nói. Những người giải quyết miễn phí khác có thể được tìm thấy trên trang web COIN-OR . Theo hiểu biết của tôi, các bộ giải phi tuyến không có các ràng buộc Python được cung cấp bởi các nhà phát triển; bất kỳ ràng buộc nào bạn tìm thấy sẽ là bên thứ ba. Để có được các giải pháp tốt, bạn cũng sẽ phải bọc bất kỳ bộ giải phi tuyến, lồi nào bạn tìm thấy trong các phương pháp tối ưu hóa toàn cầu ngẫu nhiên thích hợp hoặc trong thuật toán tối ưu hóa toàn cầu xác định như phân nhánh và liên kết. Ngoài ra, bạn có thể sử dụng Bonmin hoặc Couenne, cả hai đều là các bộ giải tối ưu hóa không lồi xác định, hoạt động tốt so với bộ giải hiện đại, BARON .

Nếu bạn có thể mua một bộ giải tối ưu hóa thương mại, bạn có thể xem xét việc xem xét ngôn ngữ mô hình hóa GAM , bao gồm một số bộ giải tối ưu hóa phi tuyến. Đặc biệt đề cập đến các giao diện cho bộ giải CONOPT, SNOPT và BARON. (CONOPT và SNOPT là các bộ giải lồi.) Một giải pháp loại bỏ mà tôi đã sử dụng trước đây là sử dụng các ràng buộc ngôn ngữ Fortran (hoặc Matlab) với GAM để viết tệp GAM và gọi GAM từ Fortran (hoặc Matlab) để tính toán giải pháp của một vấn đề tối ưu hóa. GAMS có các ràng buộc ngôn ngữ Python và một nhân viên hỗ trợ rất nhạy bén sẵn sàng giúp đỡ nếu có bất kỳ rắc rối nào. (Tuyên bố miễn trừ trách nhiệm: Tôi không có liên kết với GAM, nhưng phòng thí nghiệm của tôi có giấy phép GAM.) Người giải quyết thương mại không nên tệ hơnfmincon; Thực tế, tôi sẽ ngạc nhiên nếu họ không tốt hơn nhiều. Nếu các vấn đề của bạn có kích thước đủ nhỏ, thì bạn thậm chí có thể không cần phải mua giấy phép GAM và giấy phép cho người giải quyết, bởi vì bản sao đánh giá của GAM có thể được tải xuống từ trang web của họ. Nếu không, có lẽ bạn sẽ muốn quyết định người mua nào sẽ mua cùng với giấy phép GAM. Điều đáng chú ý là BARON yêu cầu bộ giải lập trình tuyến tính số nguyên hỗn hợp và giấy phép cho hai bộ giải lập trình tuyến tính số nguyên hỗn hợp tốt nhất CPLEX và GUROBI là miễn phí cho các học giả, vì vậy bạn có thể thoát khỏi việc chỉ cần mua giao diện GAM hơn các giao diện và giấy phép người giải quyết, có thể giúp bạn tiết kiệm khá nhiều tiền.

Điểm này lặp đi lặp lại: đối với bất kỳ bộ giải tối ưu hóa không lồi xác định nào tôi đã đề cập ở trên, bạn cần có thể xây dựng mô hình như một bộ phương trình rõ ràng. Mặt khác, các thuật toán tối ưu hóa không lồi sẽ không hoạt động, bởi vì tất cả chúng đều dựa vào phân tích biểu tượng để xây dựng các thư giãn lồi cho các thuật toán giống như nhánh và liên kết.

CẬP NHẬT: Ban đầu, một suy nghĩ không xảy ra với tôi là bạn cũng có thể gọi Bộ công cụ để tối ưu hóa nâng cao ( TAO ) và PETSc sử dụng tao4pypetc4py , điều này sẽ có lợi ích tiềm năng bổ sung cho việc song song hóa dễ dàng hơn và tận dụng sự quen thuộc với PETSc và các công cụ ACTS .

CẬP NHẬT # 2: Dựa trên thông tin bổ sung mà bạn đã đề cập, các phương pháp lập trình bậc hai (SQP) tuần tự sẽ là lựa chọn tốt nhất của bạn. Các phương pháp SQP thường được coi là mạnh mẽ hơn các phương pháp điểm bên trong, nhưng có nhược điểm là yêu cầu các giải pháp tuyến tính dày đặc. Vì bạn quan tâm nhiều hơn đến sự mạnh mẽ hơn là tốc độ, nên SQP sẽ là lựa chọn tốt nhất của bạn. Tôi không thể tìm thấy một người giải quyết SQP tốt ngoài đó được viết bằng Python (và rõ ràng, Sven Leyffer cũng không thể làm được tại Argonne trong báo cáo kỹ thuật này ). Tôi đoán rằng các thuật toán được triển khai trong các gói như SciPy và OpenOpt có bộ xương cơ bản của một số thuật toán SQP được triển khai, nhưng không có các phương pháp phỏng đoán chuyên biệt mà các mã tiên tiến hơn sử dụng để khắc phục các vấn đề hội tụ. Bạn có thể thử NLopt, được viết bởi Steven Johnson tại MIT. Tôi không có hy vọng cao cho nó bởi vì nó không có bất kỳ danh tiếng nào mà tôi biết, nhưng Steven Johnson là một người thông minh, người viết phần mềm tốt (sau tất cả, anh ấy đã đồng viết FFTW). Nó thực hiện một phiên bản của SQP; Nếu đó là phần mềm tốt, hãy cho tôi biết.

Tôi đã hy vọng rằng TAO sẽ có một cái gì đó theo cách của một người giải quyết tối ưu hóa bị ràng buộc, nhưng nó không. Bạn chắc chắn có thể sử dụng những gì họ phải xây dựng lên; họ có rất nhiều thành phần ở đó Tuy nhiên, như bạn đã chỉ ra, sẽ rất nhiều việc để bạn làm điều đó và nếu bạn gặp phải rắc rối đó, bạn cũng có thể là một nhà phát triển TAO.

Với thông tin bổ sung đó, nhiều khả năng bạn sẽ nhận được kết quả tốt hơn khi gọi GAM từ Python (nếu đó hoàn toàn là một tùy chọn) hoặc cố gắng vá giao diện Python IPOPT. Vì IPOPT sử dụng phương pháp điểm bên trong, nên nó sẽ không mạnh mẽ, nhưng có lẽ việc triển khai phương pháp điểm bên trong của Andreas tốt hơn đáng kể so với triển khai SQP của Matlab, trong trường hợp đó, bạn có thể không hy sinh sự mạnh mẽ nào cả. Bạn sẽ phải chạy một số nghiên cứu trường hợp để biết chắc chắn.

Bạn đã nhận thức được mẹo để cải tổ các ràng buộc bất đẳng thức hợp lý như các ràng buộc bất đẳng thức đa thức (nó có trong sách của bạn); lý do điều này sẽ giúp BARON và một số người giải quyết khác không phải là vì nó có thể sử dụng phân tích thuật ngữ để tạo ra các bất đẳng thức hợp lệ bổ sung mà nó có thể sử dụng như các phép cắt để cải thiện và tăng tốc độ hội tụ của người giải.

Không bao gồm các ràng buộc GAM của Python và giao diện Python cho IPOPT, câu trả lời là không, không có bất kỳ bộ giải lập trình phi tuyến chất lượng cao nào cho Python. Có lẽ @Dominique sẽ thay đổi điều đó với NLPy.

CẬP NHẬT # 3: Nhiều nỗ lực hơn trong việc tìm kiếm một bộ giải dựa trên Python mang lại PyGMO , một tập hợp các ràng buộc Python với PaGMO, một bộ giải tối ưu hóa đa hướng toàn cầu dựa trên C ++. Mặc dù nó được tạo ra để tối ưu hóa đa mục tiêu, nó cũng có thể được sử dụng để lập trình phi tuyến mục tiêu duy nhất và có giao diện Python với IPOPT và SNOPT, trong số các bộ giải khác. Nó được phát triển trong Cơ quan Vũ trụ Châu Âu , vì vậy hy vọng có một cộng đồng đằng sau nó. Nó cũng được phát hành tương đối gần đây (ngày 24 tháng 11 năm 2011).


xin lưu ý PaGMO được cấp phép GPL
denfromufa

14

APM Python

Cập nhật: xem gói GEKKO mới mà chúng tôi vừa phát hành.

APM Python là một hộp công cụ tối ưu hóa miễn phí có giao diện với APOPT, BPOPT, IPOPT và các bộ giải khác. Nó cung cấp thông tin đầu tiên (Jacobian) và thứ hai (Hessian) cho người giải quyết và cung cấp giao diện web tùy chọn để xem kết quả. Máy khách Python APM được cài đặt với pip:

 pip install APMonitor

Nó cũng có thể được cài đặt trong tập lệnh Python với:

try:
    from APMonitor.apm import *
except:
    # Automatically install APMonitor
    import pip
    pip.main(['install','APMonitor'])
    from APMonitor.apm import *

Chúng tôi đã thực hiện một vài bài kiểm tra điểm chuẩn và thấy rằng sự kết hợp giữa APOPT (phương pháp thiết lập tích cực) và IPOPT (phương pháp điểm bên trong) có thể giải quyết được phần lớn các vấn đề về điểm chuẩn. Có một số vấn đề mẫu được bao gồm trong tệp zip tải xuống. Vấn đề mà có lẽ bạn sẽ muốn bắt đầu là vấn đề Hock Schittkowski # 71. Đây là ví dụ đơn giản nhất và giải thích cách giải quyết các vấn đề tối ưu hóa bị ràng buộc.

Có một giao diện trình duyệt và API cho Python / MATLAB. API to Python là một tập lệnh đơn (apm.py) có sẵn để tải xuống từ trang chủ apmonitor.com. Khi tập lệnh được tải vào mã Python, nó cung cấp khả năng giải quyết các vấn đề về:

  • Phương trình phi tuyến
  • Lập trình hỗn hợp số nguyên
  • Phương trình vi phân và đại số
  • Phù hợp với mô hình bình phương nhỏ nhất
  • Ước tính đường chân trời
  • Điều khiển dự báo mô hình phi tuyến
  • Vân vân.

Đối với người dùng mới, phần mềm APM Python có diễn đàn Google Groups nơi người dùng có thể đăng câu hỏi. Có các hội thảo trên web giới thiệu các vấn đề tối ưu hóa trong nghiên cứu hoạt động và kỹ thuật.

Dưới đây là một ví dụ về một vấn đề tối ưu hóa (hs71.apm).

Model
  Variables
    x[1] = 1, >=1, <=5
    x[2] = 5, >=1, <=5
    x[3] = 5, >=1, <=5
    x[4] = 1, >=1, <=5
  End Variables

  Equations
    x[1] * x[2] * x[3] * x[4] > 25
    x[1]^2 + x[2]^2 + x[3]^2 + x[4]^2 = 40

    minimize  x[1] * x[4] * (x[1]+x[2]+x[3]) + x[3]
  End Equations
End Model

Vấn đề tối ưu hóa được giải quyết với tập lệnh Python sau:

from APMonitor.apm import *
server = 'http://byu.apmonitor.com'

# Application name
app = 'eqn'

# Clear previous application
apm(server,app,'clear all')

# Load model file
apm_load(server,app,'hs71.apm')

# Option to select solver (1=APOPT, 2=BPOPT, 3=IPOPT)
apm_option(server,app,'nlc.solver',3)

# Solve on APM server
solver_output = apm(server,app,'solve')

# Display solver output
print(solver_output)

# Retrieve results
results = apm_sol(server,app)

# Display results
print('--- Results of the Optimization Problem ---')
print(results)

# Display Results in Web Viewer 
url = apm_var(server,app)
print("Opened Web Viewer: " + url)

APM Python là một dịch vụ web miễn phí để tối ưu hóa. Các vấn đề tối ưu hóa được giải quyết trên các máy chủ từ xa và kết quả được trả về tập lệnh Python cục bộ. Một máy chủ cục bộ APMonitor cũng có sẵn để tải xuống để không cần kết nối Internet ( Tải xuống máy chủ ). Gần đây chúng tôi đã thêm hỗ trợ xử lý song song cho cả MATLAB và Python. Mô-đun Python tương thích với Python 2.7 hoặc Python 3+.


2
John, tôi thấy rằng APM Python có sẵn miễn phí, nhưng tôi không thể tìm ra gói xem nó có chứa các bộ giải mà nó sử dụng cục bộ hay nó yêu cầu kết nối với trang web của AP Monitor để tính toán. Tôi tò mò về điều đó.
Aron Ahmadia

3
Aron, các tập lệnh MATLAB hoặc Python yêu cầu kết nối internet đến các máy chủ APM để giải quyết các vấn đề tối ưu hóa. Điều này có một số lợi thế và bất lợi. Về mặt tích cực, một dịch vụ web để tối ưu hóa cho phép khả năng tương thích đa nền tảng, truy cập miễn phí vào một số bộ giải thương mại và nâng cấp phần mềm minh bạch cho người dùng. Mặt khác, APM không linh hoạt như một số lựa chọn thay thế nguồn mở nhưng được thiết kế cho người dùng công nghiệp ủng hộ giải pháp chìa khóa trao tay cho các ứng dụng tối ưu hóa.
John Hedengren

@JohnHedengren Tôi có một số tính toán trước trong MATLAB bằng cách sử dụng một thư viện khác để tự xây dựng vấn đề tối ưu hóa, đặc biệt, các ràng buộc liên quan đến các cuộc gọi bên ngoài này. Bạn có nghĩ rằng APM vẫn phù hợp cho mục đích này?
gpavanb

Tôi nghĩ thuật ngữ chung cho nó là tối ưu hóa hộp đen.
gpavanb

@gpavanb Gói APMonitor yêu cầu các phương trình được viết bằng ngôn ngữ mô hình hóa. Một tùy chọn để tải mã bên ngoài là tạo một đối tượng cung cấp phần dư và ít nhất là các đạo hàm đầu tiên phân tích. Chúng tôi thường mã hóa các đối tượng này trong F90 để lấy tốc độ, chẳng hạn như các đối tượng được liệt kê ở đây: apmonitor.com/wiki/index.php/Main/Objects Tôi không nghĩ APMonitor là tùy chọn tốt nhất cho ứng dụng tối ưu hóa hộp đen.
John Hedengren

7

Mặc dù điều này không hoàn toàn trả lời câu hỏi của bạn, tôi là tác giả của gói Python dành cho lập trình phi tuyến có tên NLPy. Phiên bản gần đây nhất có thể được truy xuất từ https://github.com/dpo/nlpy

Tôi phải nhấn mạnh rằng NLPy là cấp độ nghiên cứu và người giải quyết bao gồm không có nghĩa là mạnh mẽ như các mã dày dạn hơn như IPOPT. Hơn nữa, họ hiện yêu cầu người Jacob phải được cung cấp. Điều đó đang được nói, quan điểm của NLPy là cung cấp các công cụ cần thiết cho các nhà nghiên cứu để lắp ráp các bộ giải tùy chỉnh nếu họ cần. Bằng mọi giá, tôi sẽ rất thích nghe ý kiến ​​của bạn ngoại tuyến nếu bạn thử. Bạn cũng có thể tìm thấy các gói liên quan https://github.com/dpo/pykrylovhttps://github.com/dpo/pyorder hữu ích. Hiện tại, tài liệu của NLPy chắc chắn còn thiếu. Hai cái còn lại phải hợp lý.


7

pyomo là một môi trường mô hình hóa hoàn toàn giống như GAM / AMPL để tối ưu hóa trong python. Nó cực kỳ mạnh mẽ, có giao diện cho tất cả các bộ giải được AMPL hỗ trợ và tự động tạo Jacobian, v.v. Tuy nhiên, do nó chạy trong 'môi trường trăn ảo', nên việc liên kết nó với mã hiện tại có thể không tầm thường.


5

GEKKO Python

Gần đây chúng tôi đã phát hành (2018) gói Python GEKKOđể lập trình phi tuyến với các bộ giải như IPOPT, APOPT, BPOPT, MINOS và SNOPT với các phương thức điểm hoạt động và điểm bên trong. Một trong những vấn đề khi sử dụng các bộ giải này là thông thường bạn cần cung cấp ít nhất các công cụ phái sinh đầu tiên và các công cụ phái sinh thứ hai tùy chọn. Có một số ngôn ngữ mô hình đẹp có thể làm điều này cho bạn, như được đề cập với các câu trả lời khác. GEKKO biên dịch các phương trình thành mã byte sao cho giống như bạn đã viết mô hình trong Fortran hoặc C ++ về tốc độ. Sự khác biệt tự động cung cấp các dẫn xuất thứ 1 và thứ 2 ở dạng thưa thớt cho các bộ giải dựa trên độ dốc. Chúng tôi đã thiết kế GEKKO cho các vấn đề kiểm soát tối ưu nhưng nó cũng có thể giải quyết các vấn đề tương tự như fmincon. Dưới đây là một ví dụ nhanh về một vấn đề lập trình phi tuyến với các ràng buộc bất đẳng thức và bất đẳng thức. Bạn đầu tiên'

pip install gekko

Bài toán Hock Schittkowski # 71 được trình bày dưới đây là một ví dụ về hàm mục tiêu, ràng buộc bất đẳng thức, ràng buộc đẳng thức và bốn biến với giới hạn trên và dưới.

from gekko import GEKKO
m = GEKKO() # Initialize gekko
# Initialize variables
x1 = m.Var(value=1,lb=1,ub=5)
x2 = m.Var(value=5,lb=1,ub=5)
x3 = m.Var(value=5,lb=1,ub=5)
x4 = m.Var(value=1,lb=1,ub=5)
# Equations
m.Equation(x1*x2*x3*x4>=25)
m.Equation(x1**2+x2**2+x3**2+x4**2==40)
m.Obj(x1*x4*(x1+x2+x3)+x3) # Objective
m.options.IMODE = 3 # Steady state optimization
m.solve() # Solve
print('Results')
print('x1: ' + str(x1.value))
print('x2: ' + str(x2.value))
print('x3: ' + str(x3.value))
print('x4: ' + str(x4.value))    

GEKKO hoạt động trên tất cả các nền tảng (bộ xử lý Windows, MacOS, Linux, ARM) và với Python 2.7 và 3+. Tùy chọn cục bộ hoàn toàn khả dụng mà không cần kết nối Internet bằng cách đặt tùy chọn "remote = false". Tùy chọn cục bộ hiện chỉ khả dụng cho Windows và chúng tôi đang làm việc trên các phiên bản khác như bộ xử lý Linux, MacOS, ARM để chạy cục bộ mà không cần kết nối Internet. Phiên bản địa phương chỉ bao gồm những người giải quyết miễn phí không yêu cầu giấy phép. Theo mặc định, sự cố được gửi đến một máy chủ công cộng nơi giải pháp được tính toán và trả về Python.

Mặc dù câu hỏi này đặc biệt về việc giải quyết lập trình phi tuyến trong Python, tôi cũng sẽ nhấn mạnh một vài loại vấn đề khác mà GEKKO có thể giải quyết và một số tài nguyên để học tối ưu hóa. GEKKO cũng giải các phương trình đại số hỗn và số nguyên và có một số đối tượng được lập trình sẵn cho các điều khiển nâng cao (tương tự như DMC, RMPCT, v.v.). Các chế độ hoạt động bao gồm đối chiếu dữ liệu, tối ưu hóa thời gian thực, mô phỏng động và điều khiển dự báo phi tuyến.

Tôi dạy hai khóa về tối ưu hóa (tối ưu hóa thiết kếtối ưu hóa động ) và đã đăng tài liệu khóa học trực tuyến. Khóa học tối ưu hóa động được cung cấp mỗi năm bắt đầu từ tháng 1 và chúng tôi sử dụng gói Python GEKKO (và MATLAB) cho khóa học. GEKKO là một phần mở rộng của Bộ tối ưu hóa APMonitor nhưng đã tích hợp mô hình hóa và trực quan hóa giải pháp trực tiếp trong Python. Các tham chiếu APMonitor và GEKKO đưa ra một mẫu các loại ứng dụng có thể được giải quyết với gói này. GEKKO được phát triển theo Quỹ tài trợ nghiên cứu khoa học quốc gia # 1547110 .


Bạn có thể chỉnh sửa câu trả lời của mình để giải thích cách phần mềm của bạn giải quyết các yêu cầu cụ thể được đề cập trong bài đăng không? Mặt khác, nó trông giống như một bài đăng quảng cáo chăn hơn là một câu trả lời cho câu hỏi (và có khả năng sẽ bị đóng).
Christian Clason

Christian, tôi đã chỉnh sửa câu trả lời để cụ thể hơn cho câu hỏi. Tôi đã chuyển thông tin bổ sung về GEKKO và các khóa học trực tuyến đến cùng nhưng có thể xóa nó nếu cần.
John Hedengren

4

1
Cảm ơn, nhưng đó là một cái mà tôi đã thử (thông qua OpenOpt, cung cấp giao diện bổ sung cho nó). Nó không bao giờ tốt hơn fmincon / sqp và thất bại trong nhiều trường hợp sau đó thành công.
David Ketcheson

1
Cập nhật: Tôi đã thử cái này trực tiếp từ SciPy. Nó thất bại ngay cả đối với các vấn đề trong đó fmincon có thể liên tục tìm thấy tối ưu toàn cầu trong vài giây.
David Ketcheson

4

PyGMO chứa một số bộ giải, cung cấp giao diện tương tự cho chúng. IPOPT và slsqp scipy được bao gồm trong trường hợp bạn biên dịch mã và tải xuống / cài đặt mã bên thứ ba một cách độc lập.

Như một phần thưởng, việc sử dụng song song bộ giải được thực hiện dễ dàng (đa tầng) thông qua lớp quần đảo!


3

cvxmod , một trình bao bọc Python xung quanh phần mềm tối ưu hóa lồi của Stephen Boyd. Đây là một phần của gói Sage .


Nhưng OP đang hỏi về một vấn đề tối ưu hóa không lồi.
Alejandro

1
OP đang hỏi về một vấn đề tối ưu hóa không lồi, nhưng tất cả các bộ giải được đề cập cho đến nay chỉ được đảm bảo để tìm các giải pháp tối ưu hóa epsilon cho các vấn đề tối ưu hóa lồi mà không cần siêu dữ liệu bổ sung (multistart hoặc các thuật toán tối ưu toàn cầu ngẫu nhiên khác gọi là xác định, các bộ giải tối ưu hóa phi tuyến, lồi) hoặc các thuật toán giống như nhánh và liên kết (như nhánh và ràng buộc, nhánh và cắt, và nhánh và giảm) đòi hỏi phải nới lỏng các hàm mục tiêu và các ràng buộc. Câu trả lời này không tệ hơn bất kỳ câu hỏi nào khác được đề cập đến vào ngày 11 tháng 12.
Geoff Oxberry

Geoff, làm thế nào tôi có thể áp dụng cvxmod cho một vấn đề không lồi?
David Ketcheson

Tôi chưa sử dụng phần mềm, nhưng trên lý thuyết, giống như bất kỳ bộ giải lồi nào khác, bạn sẽ sử dụng phần mềm này để tìm các giải pháp tối ưu cục bộ giống như bạn đang sử dụng fmincon bây giờ (cũng là một bộ giải lồi). Một cách để sử dụng nó sẽ là nhiều bước. Tạo một danh sách các điểm sẽ được sử dụng làm dự đoán ban đầu cho người giải lồi của bạn. Đối với mỗi điểm được sử dụng như một phỏng đoán, ghi lại lời giải được trả về bởi người giải. Điểm tương ứng với giá trị hàm mục tiêu tối thiểu trên tất cả các giải pháp được trả về là giá trị gần đúng nhất với mức tối ưu toàn cầu.
Geoff Oxberry

1
@Geoff: Vâng, tôi đang sử dụng multistart. Đối với CVXMOD, nó chỉ chấp nhận các vấn đề có thể được đặt ra theo cách lập trình lồi có kỷ luật. Các vấn đề lập trình chung phi tuyến không thể. Như bạn nói, tôi có thể tìm kiếm những thư giãn lồi liên tiếp gần đúng với vấn đề của mình, nhưng toàn bộ mục tiêu ở đây là để tôi làm ít việc hơn.
David Ketcheson


3






Kể từ phiên bản 2014b, điều này hiện được Matlab hỗ trợ trực tiếp; xem mathworks.de/help/matlab/matlab-engine-for-python.html
Christian Clason

@Christian Clason, điều đó dường như không làm numpy-to-Matlab chút nào? như python-matlab-cầu nào. (Tôi chưa sử dụng nó.)
denis

Không trực tiếp (dường như có một lớp mảng MATLAB tùy chỉnh), nhưng chắc chắn sẽ có một cách để chuyển đổi giữa điều đó và numpy. Tất nhiên, sẽ có một số chi phí, do sao chép dữ liệu, nhưng có lẽ vấn đề ít hơn đối với các vấn đề kích thước mà OP đề cập. (Không sử dụng bản thân mình; chỉ nghĩ rằng tôi đã chỉ ra tùy chọn.)
Christian Clason

3

lưu vực nhảy qua scipy đủ cho nhu cầu của bạn? Nếu nó trả về một min cục bộ và không phải là min toàn cầu, bạn có thể thay đổi số lần lặp và / hoặc giới hạn áp dụng.


2

CMA-ES thì sao? Nó có các ràng buộc Python và rất phù hợp với các vấn đề tối ưu hóa phi tuyến, phi tuyến và tôi đã sử dụng nó khá nhiều: https://www.lri.fr/~hansen/cmaesintro.html

Cài đặt qua pip:

pip install cma

Đây là một số mã mẫu từ trang web của họ:

import cma
help(cma)  # "this" help message, use cma? in ipython
help(cma.fmin)
help(cma.CMAEvolutionStrategy)
help(cma.CMAOptions)
cma.CMAOptions('tol')  # display 'tolerance' termination options
cma.CMAOptions('verb') # display verbosity options
res = cma.fmin(cma.Fcts.tablet, 15 * [1], 1)
res[0]  # best evaluated solution
res[5]  # mean solution, presumably better with noise

Trình tối ưu hóa này khác xa với những gì OP yêu cầu. Ví dụ, không có cách rõ ràng về cách xử lý các ràng buộc bình đẳng hoặc bất bình đẳng với CMA-ES.
ares

1

Vì MATLAB có trình biên dịch JIT trong khi CPython chưa có (ít nhất là cho đến khi pypy nhận được hỗ trợ đầy đủ). Có vẻ như bạn muốn một bộ giải miễn phí vượt trội hơn so với sản xuất thương mại fmincon. Có quá nhiều không?

IIRC trong số những người giải quyết NLP thương mại, chỉ snopt đã cung cấp API Python cho đến bây giờ (mặc dù nó khá xấu).

Những người giải quyết OpenOpt nào bạn đã thử? Bạn có bao nhiêu biến và ràng buộc trong tác vụ nonconvex của mình?

Bạn có thể thử IPOPT thông qua API OpenOpt / Funcdesigner mà không cần cài đặt trên máy chủ Sage OpenOpt (chú ý đến hình ảnh "chuyển từ sage sang python").

10300(x-0,1)2+10-300(y-0,2)2(x,y)= =(1,1)


2
Nếu bạn đọc kỹ, tôi chỉ yêu cầu một cái gì đó có độ mạnh tương tự như fmincon. Nó không cần phải tốt hơn, và thậm chí có thể chậm hơn.
David Ketcheson

1

đối với các vấn đề toàn cầu, bạn có thể quan tâm đến http://openopt.org/interache và các nhà giải quyết toàn cầu openopt khác (http://openopt.org/GLP) để tối ưu hóa cục bộ openopt cũng cung cấp nhiều giải pháp khác nhau: http://openopt.org / NLP


Vâng, tôi đã thử một vài trong số đó, nhưng không ai đo được đến fmincon.
David Ketcheson

1

Thật tốt khi đề cập ở đây rằng bộ giải Google Ceres thực sự là một trình tối ưu phi tuyến tính rất mạnh, được sử dụng trong nhiều dự án.

Ngoài ra còn có một trình bao bọc python có sẵn ở đây: https://github.com/rll/cyres


Có phải đó là Levenbeg-Marquest không? mà, trong khi tốt đẹp, là xa những gì OP muốn
denis

Mặc dù ceres là một bộ giải thực sự tốt, nhưng nó hoàn toàn không hỗ trợ các ràng buộc đẳng thức và chỉ hỗ trợ các ràng buộc bất đẳng thức như giới hạn trên / dưới của các tham số (như phiên bản hiện tại 1.12).
or Dixow

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.