Performance of Commercial and Noncommercial Optimization Software

Similar documents
Performance of Optimization Software - an Update

An Overview Of Software For Convex Optimization. Brian Borchers Department of Mathematics New Mexico Tech Socorro, NM

Cloud Branching. Timo Berthold. joint work with Domenico Salvagnin (Università degli Studi di Padova)

TOMLAB - For fast and robust largescale optimization in MATLAB

The Gurobi Optimizer

SBB: A New Solver for Mixed Integer Nonlinear Programming

Mixed Integer Linear Programming in R

GAMS Productivity - Performance - Reliability

Conic optimization: examples and software

Solving convex MINLP problems with AIMMS

An Introduction on SemiDefinite Program

GAMS, Condor and the Grid: Solving Hard Optimization Models in Parallel. Michael C. Ferris University of Wisconsin

Fundamentals and Recent Developments of the GAMS System

wu.cloud: Insights Gained from Operating a Private Cloud System

Solving polynomial least squares problems via semidefinite programming relaxations

Multicore Parallel Computing with OpenMP

Using diversification, communication and parallelism to solve mixed-integer linear programs

Three Paths to Faster Simulations Using ANSYS Mechanical 16.0 and Intel Architecture

Big Data Optimization at SAS

Using the analytic center in the feasibility pump

Lecture 3. Linear Programming. 3B1B Optimization Michaelmas 2015 A. Zisserman. Extreme solutions. Simplex method. Interior point method

Automated Performance Testing and Analysis. Armin Pruessner GAMS Development Corporation

SYSTEM SETUP FOR SPE PLATFORMS

CentOS Linux 5.2 and Apache 2.2 vs. Microsoft Windows Web Server 2008 and IIS 7.0 when Serving Static and PHP Content

New and Forthcoming Developments in the AMPL Modeling Language & System

Sage SalesLogix White Paper. Sage SalesLogix v8.0 Performance Testing

AIMMS 4.0. Portable component Linux Intel version. Release Notes for Build 4.9. Visit our web site for regular updates AIMMS

Quality Assurance For Mathematical Modeling Systems

A high-performance software package for semidefinite programs: SDPA 7

Solving NP Hard problems in practice lessons from Computer Vision and Computational Biology

Molecular Devices High Content Data Management Solution Database Schema

VirtualCenter Database Performance for Microsoft SQL Server 2005 VirtualCenter 2.5

Maximize Performance and Scalability of RADIOSS* Structural Analysis Software on Intel Xeon Processor E7 v2 Family-Based Platforms

Development of Monitoring and Analysis Tools for the Huawei Cloud Storage

A numerically adaptive implementation of the simplex method

ARGONNENATIONALLABORATORY 9700SouthCassAvenue Argonne,Illinois BenchmarkingOptimizationSoftwarewithPerformanceProles

Assessing the Performance of OpenMP Programs on the Intel Xeon Phi

Recommended hardware system configurations for ANSYS users

How To Test For Performance And Scalability On A Server With A Multi-Core Computer (For A Large Server)

x64 Servers: Do you want 64 or 32 bit apps with that server?

System Requirements Table of contents

PERFORMANCE ENHANCEMENTS IN TreeAge Pro 2014 R1.0

A Weighted-Sum Mixed Integer Program for Bi-Objective Dynamic Portfolio Optimization

Virtuoso and Database Scalability

Performance Characteristics of Large SMP Machines

Ahsay Online Backup Suite v5.0. Whitepaper Backup speed

Nonlinear Optimization: Algorithms 3: Interior-point methods

Fleet management in rail transport: Petroleum rakes in Indian Railways

LocalSolver: black-box local search for combinatorial optimization

Performance Characteristics of VMFS and RDM VMware ESX Server 3.0.1

Checklist Florin / Calacsy 6.x / 7.x Small Business model. Document versie: 0.2

A Study on the Scalability of Hybrid LS-DYNA on Multicore Architectures

Column Generation in GAMS Extending the GAMS Branch-and-Cut-and-Heuristic (BCH) Facility

Simplified Benders cuts for Facility Location

Qualified Apple Mac Workstations for Avid Media Composer v5.0.x

BIG DATA PROBLEMS AND LARGE-SCALE OPTIMIZATION: A DISTRIBUTED ALGORITHM FOR MATRIX FACTORIZATION

Configuration Maximums VMware vsphere 4.0

Parallel Programming at the Exascale Era: A Case Study on Parallelizing Matrix Assembly For Unstructured Meshes

Clusters: Mainstream Technology for CAE

SUBJECT: SOLIDWORKS HARDWARE RECOMMENDATIONS UPDATE

Netezza and Business Analytics Synergy

Archiving Microsoft Exchange Mailboxes on Hitachi Content Platform using Storage Adapter for Symantec Enterprise Vault

Whitepaper: performance of SqlBulkCopy

Microsoft Windows Apple Mac OS X

Sage Grant Management System Requirements

High Performance. CAEA elearning Series. Jonathan G. Dudley, Ph.D. 06/09/ CAE Associates

Estimate Performance and Capacity Requirements for Workflow in SharePoint Server 2010

HP reference configuration for entry-level SAS Grid Manager solutions

Exceptions to the Rule: Essbase Design Principles That Don t Always Apply

Muse Server Sizing. 18 June Document Version Muse

The CNMS Computer Cluster

Understanding the Benefits of IBM SPSS Statistics Server

Adaptive Stable Additive Methods for Linear Algebraic Calculations

Scaling Objectivity Database Performance with Panasas Scale-Out NAS Storage

System Requirements - filesmart

Improved LS-DYNA Performance on Sun Servers

Microsoft Windows Apple Mac OS X

JBoss Seam Performance and Scalability on Dell PowerEdge 1855 Blade Servers

Run-time Resource Management in SOA Virtualized Environments. Danilo Ardagna, Raffaela Mirandola, Marco Trubian, Li Zhang

XTM Web 2.0 Enterprise Architecture Hardware Implementation Guidelines. A.Zydroń 18 April Page 1 of 12

InterScan Web Security Virtual Appliance

In-Memory Databases Algorithms and Data Structures on Modern Hardware. Martin Faust David Schwalb Jens Krüger Jürgen Müller

Performance Evaluation of VMXNET3 Virtual Network Device VMware vsphere 4 build

Support of Windows Server 2012 The NCP Secure Enterprise VPN Server supports the Windows Server 2012 (64 bit) operating system.

LLamasoft K2 Enterprise 8.1 System Requirements

Oracle Database Reliability, Performance and scalability on Intel Xeon platforms Mitch Shults, Intel Corporation October 2011

Transcription:

Performance of Commercial and Noncommercial Optimization Software IINFORMS 2012 Phoenix, AZ October 2012 H. D. Mittelmann School of Math and Stat Sciences Arizona State University 1

Services we provide Guide to Software: Decision Tree http://plato.asu.edu/guide.html Software Archive Software Evaluation: Benchmarks Archive of Testproblems Web-based Solvers (1/3 of NEOS) 2

We maintain the following NEOS solvers (8 categories) Combinatorial Optimization * CONCORDE [TSP Input] Global Optimization * ICOS [AMPL Input] Linear Programming * bpmpd [AMPL Input][LP Input][MPS Input][QPS Input] Mixed Integer Linear Programming * FEASPUMP [AMPL Input][LP Input][MPS Input] * SCIP [AMPL Input][LP Input][MPS Input] [ZIMPL Input][OSIL Input] *** also in global category and mixed-int nonlin constrained cat.*** * qsopt_ex [LP Input][MPS Input] [AMPL Input] Nondifferentiable Optimization * condor [AMPL Input] Semi-infinite Optimization * nsips [AMPL Input] Stochastic Linear Programming * bnbs [SMPS Input] * DDSIP [LP Input][MPS Input] 3

We maintain the following NEOS solvers (cont.) Semidefinite (and SOCP) Programming * csdp [MATLAB_BINARY Input][SPARSE_SDPA Input] * penbmi [MATLAB Input][MATLAB_BINARY Input] * pensdp [MATLAB_BINARY Input][SPARSE_SDPA Input] * sdpa [MATLAB_BINARY Input][SPARSE_SDPA Input] * sdplr [MATLAB_BINARY Input][SDPLR Input][SPARSE_SDPA Input] * sdpt3 [MATLAB_BINARY Input][SPARSE_SDPA Input] * sedumi [MATLAB_BINARY Input][SPARSE_SDPA Input] 4

Solving the MIPLIB 2010 Problems In late 2010 we had solved a number of instances In early 2012 we decided to solve those problems that a commercial solver could solve in 1-3 days. We used four platforms Intel Xeon E7540 (2.0 Ghz, 1TB, 24 resp 32 cores) Intel Xeon X5680 (3.33 GHz, 32GB, 12 cores) Intel Xeon X5690 (3.47 GHz, 48GB, 6 cores) Intel i7-2600 (3.4 GHz, 16GB, 4 cores) 5

We solved 24 cases plus 4 feasible solves instance cores time category -------------------------------------------------- b2c1s1 12/12 116575 hard berlin_5_8_0 10/12 32413 hard blp-ic97 12/12 1868 easy buildingenergy 1/4 895 easy g200x740i 12/12 104738 hard maxgasflow 6/6 66726 hard neos-631710 12/12 1265 easy neos-948126 8/12 15959 hard ns1696083 8/12 6834 hard opm2-z10-s2 12/12 10131 hard opm2-z11-s8 12/12 18286 hard -------------------------------------------------- 6

instance cores time category -------------------------------------------------- opm2-z12-s14 4/4 49164 hard opm2-z12-s7 12/12 72492 hard p100x588b 8/12 19820 hard pigeon-13 32/32 77757 hard r80x800 12/12 283303 hard rmatr200-p10 4/4 19644 hard satellites3-40-fs 4/6 32952 hard satellites3-40 4/4 21205 hard set3-15 24/24 231777 hard transportmoment 12/12 30 easy uc-case3 8/12 158881 hard uct-subprob 12/12 2106 easy vpphard2 4/4 43985 hard wnq-n100-mw99-14 12/12 28124 hard -------------------------------------------------- 7

Overview of Talk Current and Selected(*) Benchmarks Parallel LP benchmarks MILP benchmark (MIPLIB2010) Feasibility/Infeasibility Detection benchmarks (MIPLIB2010) slightly pathological MILP cases MINLP benchmark Conclusions 8

COMBINATORIAL OPTIMIZATION Concorde-TSP with different LP solvers (5-29-2012) LINEAR PROGRAMMING Benchmark of serial LP solvers (8-8-2012) * Benchmark of parallel LP solvers (5-4-2012) * Parallel Barrier Solvers on Large LP/QP problems (5-16-2012) Large Network-LP Benchmark (commercial vs free) (5-15-2012) SEMIDEFINITE/SQL PROGRAMMING Several SDP-codes on SDP problems with free variables (4-1-2008) Several SDP codes on problems from SDPLIB (4-10-2008) SQL problems from the 7th DIMACS Challenge (8-8-2002) Newer SDP/SOCP-codes on the 7th DIMACS Challenge problems(4-7-2008) Several SDP codes on sparse and other SDP problems (6-22-2011) SOCP (second-order cone programming) Benchmark (5-15-2012) 9

MIXED INTEGER LINEAR PROGRAMMING * MILP Benchmark - MIPLIB2010 (8-9-2012) * MILP cases that are slightly pathological (8-12-2012) * Feasibility Benchmark (6-21-2012) (MIPLIB2010) * Infeasibility Detection for MILP Problems (8-13-2012) (MIPLIB2010) NONLINEAR PROGRAMMING Benchmark of commercial and other (QC)QP Solvers (8-15-2012) AMPL-NLP Benchmark, IPOPT, KNITRO, LOQO, PENNLP, SNOPT & CONOPT (11-9-2011) MIXED INTEGER QPs and QCPs MIQ(C)P Benchmark (8-2-2012) MIXED INTEGER NONLINEAR PROGRAMMING * MINLP Benchmark (9-27-2012) PROBLEMS WITH EQUILIBRIUM CONSTRAINTS MPEC Benchmark (2-26-2012) 10

Important features of all our benchmarks Statistics of problems (dimensions etc) Links to codes given Links to test problems given Links to full logfiles given Same selection for commercial/free codes 11

Reasons for updates New version of commercial software CPLEX, GUROBI, XPRESS, KNITRO-8.1, MOSEK-7 New versions of free software CBC, CLP, SCIP, BONMIN, COUENNE, IPOPT More multicore hardware 12

Overview of Talk Current and Selected(*) Benchmarks Parallel LP benchmarks MILP benchmark (MIPLIB2010) Feasibility/Infeasibility Detection benchmarks (MIPLIB2010) slightly pathological MILP cases MINLP benchmark Observations and Conclusions 13

4 May 2012 ================================== Benchmark of parallel LP solvers ================================== H. Mittelmann <mittelmann@asu.edu> This benchmark was run on a Linux-PC (2.67 GHz Intel Core 2 Quad). The MPS-datafiles for all testcases are in one of (see column "s") miplib.zib.de/ [1] plato.asu.edu/ftp/lptestset/ [2] www.netlib.org/lp/data/ [3,7] www.sztaki.hu/~meszaros/public_ftp/lptestset/ (MISC[4], PROBLEMATIC[5], STOCHLP[6], INFEAS[8]) The (dual) simplex, barrier, and concurrent methods were tested of: CPLEX-12.4.0.0 CPLEX GUROBI-5.0.0 www.gurobi.com/ MOSEK-6.0.0.135 www.mosek.com XPRESS-7.3.1: XPRESS Scaled geometric mean of runtimes (A automatic) 4.43 2.97 5.00 3.59 1.14 1.06 1.74 1.43 1.80 1 1.52 3.58 =============================================================================== CPX-S GRB-S MSK-S XPR-S CPX-B GRB-B MSK-B XPR-B CPX-A GRB-A MSK-A XPR-A =============================================================================== 14

16 May 2012 ================================================ Parallel Barrier Solvers on Large LP/QP problems ================================================ H. Mittelmann (mittelmann@asu.edu) Logiles at plato.asu.edu/ftp/barrier_logs/ CPLEX-12.4.0.0: CPLEX GUROBI-5.0.0: GUROBI MOSEK-6.0.0.137: MOSEK XPRESS-7.3.1: XPRESS IPOPT-3.10.1: IPOPT The barrier methods (w/o crossover) of the above solvers were run on a 3.47 GHz Intel Xeon X5690 (6 cores, 48GB) on large LP problems from here. Times given are elapsed times in seconds. 15

16 May 2012 ================================================ Parallel Barrier Solvers on Large LP/QP problems ================================================ ===================================================== problem CPLEX GUROBI MOSEK XPRESS IPOPT ----------------------------------------------------- in 46462 165 914 303 pde_10 2269 756 4485 2098 pde_1 2523 2114 9586 6358 pde_200 299 547 4515 622 pde_20 1894 2018 23727 2785 pde_2 5269 15393 47523 24941 qap_2 slow fail slow 1499 srd300 10112 >35000 18212 12206 zib01 6027a 8435 9172 6682 ----------------------------------------------------- L2CTA3D 3269 6415 5672 1975 bdry2_0 1931a 1045 2628a 2545 4641 bdry2_1 10999a 6824 31211a 5192 31089 cont5_2_0 516 1051 28 556 1186 cont5_2_1 1746 4314a 57a 1352 3270 cont5_2_2 8005 fail 127 3625 11579 twod_00 2471 8795 14733a 2824 9348 twod_0 12411 46287 fail 13261 41616 ===================================================== "a": reduced accuracy 16

16 May 2012 ================================================ Parallel Barrier Solvers on Large LP/QP problems ================================================ =========================================================== problem constraints variables nonzeros MPS-file ----------------------------------------------------------- in 1526203 1449074 6813128 561 MB pde_10 13225799 4414198 39669001 1.96 GB pde_1 26993999 9005998 80970001 4.1 GB pde_200 5067399 3382596 15197001 824 MB pde_20 13225799 8824196 39669001 2.2 GB pde_2 26993999 18005996 80970001 4.5 GB qap_2 57360 14400 203040 70.7 MB srd300 1101467 2052911 59170079 1.6 GB zib01 5887041 12471400 49877768 2.5 GB ------------------------------------------------------------ L2CTA3D 210000 10000000 30000000 1.8 GB bdry2_0 4001998 4003997 19991999 bdry2_1 12253498 12256997 61235999 cont5_2_0 1959681 1961081 11749904 cont5_2_1 3999656 4001656 23986126 cont5_2_2 8999641 9002641 53979959 twod_00 505284 511446 4856046 twod_0 989604 999306 9586066 ============================================================ 17

Overview of Talk Current and Selected(*) Benchmarks Parallel LP benchmarks MILP benchmark (MIPLIB2010) Feasibility/Infeasibility Detection benchmarks (MIPLIB2010) slightly pathological MILP cases MINLP benchmark Conclusions 18

9 Aug 2012 Mixed Integer Linear Programming Benchmark (MIPLIB2010) The following codes were run on the MIPLIB2010 benchmark set with the MIPLIB2010 scripts on an Intel Xeon X5680 (32GB, Linux, 64 bits, 2*6 cores), with one, four and twelve threads. (deterministically) and a time limit of 1 hour. These are up dated and extended versions of the results produced for the MIPLIB2010 paper. CPLEX-12.4.0.0: CPLEX GUROBI-5.0.0: GUROBI ug[scip/cpx/spx]-3.0.0: Parallel development version of SCIP (SCIP+CPLEX/SOPLEX/CLP on 1 thread) CBC-2.7.7: CBC XPRESS-7.3.1: XPRESS GLPK-4.47: GLPK LP_SOLVE-5.5.2: LP_SOLVE Table for single thread, Result files per solver, Log files per solver Table for 4 threads, Result files per solver, Log files per solver Table for 12 threads, Result files per solver, Log files per solver Statistics of the problems can be obtained from the MIPLIB2010 webpage. 19

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Geometric means of times All non-successes are counted as max-time. The fastest solver is scaled to 1. The second line lists the number of problems (87 total) solved. threads CBC CPLEX GLPK GUROBI LPSOLVE SCIPC SCIPL SCIPS XPRESS ------------------------------------------------------------------------------- 1 10.1 1.26 21.6 1 18.9 3.37 5.30 5.00 1.09 solved 41 75 3 77 5 64 55 58 76 -------------------------------------------------------------------------------- threads CBC CPLEX FSCIPC FSCIPS GUROBI XPRESS ------------------------------------------------------------------- 4 11.6 1.13 6.03 10.2 1 1.17 solved 52 84 69 65 83 81 ------------------------------------------------------------------- threads CBC CPLEX FSCIPC FSCIPS GUROBI XPRESS ------------------------------------------------------------------- 12 13.4 1.2 9.51 15.6 1 1.25 solved 55 84 71 66 87 82 ------------------------------------------------------------------- 20

Overview of Talk Current and Selected(*) Benchmarks Parallel LP benchmarks MILP benchmark (MIPLIB2010) Feasibility/Infeasibility Detection benchmarks (MIPLIB2010) slightly pathological MILP cases MINLP benchmark Conclusions 21

21 Jun 2012 === Feasibility Benchmark === H. Mittelmann (mittelmann@asu.edu) Logfiles for these runs are at: plato.asu.edu/ftp/feas_bench_logs/ MILP problems from MIPLIB2010 were solved for a feasible point The following codes were run on an Intel i7-2600 (3.4 GHz, 16GB, Linux, 4 cores) with 4 threads: CPLEX-12.4.0.0: CPLEX FEASPUMP2: as implemented for interactive use at NEOS (utilizes CPLEX) GUROBI-5.0.0: GUROBI XPRESS-7.3.1: XPRESS CBC-2.7.7: CBC Times given are elapsed times in seconds. A time limit of 1 hr was imposed. Geometric means of the times are listed. For objective values see logfiles. ============================================================= problem(30 tot) CPLEX FP2 GUROBI XPRESS CBC ------------------------------------------------------------- geometric mean 8.31 16.95 1 2.06 65.4 problems solved 22 17 28 25 7 ------------------------------------------------------------- 22

21 Jun 2012 Infeasibility Detection for MILP Problems The following codes were run on the infeasible problems from MIPLIB2010 with the MIPLIB2010 scripts CPLEX-12.4.0.0: CPLEX GUROBI-5.0.0: GUROBI ug[scip/spx/cpx]: Parallel development version of SCIP CBC-2.7.7: CBC XPRESS-7.3.1: XPRESS Table for 12 threads, Result files per solver, Log files per solver Statistics of the problems can be obtained from the MIPLIB2010 webpage. +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ CBC CPLEX FSCIPC FSCIPS GUROBI XPRESS ------------------------------------------------------------------------- geom mean 52.6 1.75 25.2 31.5 1.00 3.05 ------------------------------------------------------------------------- solved of 19: 7 16 10 11 18 15 ------------------------------------------------------------------------- 23

Overview of Talk Current and Selected(*) Benchmarks Parallel LP benchmarks MILP benchmark (MIPLIB2010) Feasibility/Infeasibility Detection benchmarks (MIPLIB2010) slightly pathological MILP cases MINLP benchmark Conclusions 24

12 Aug 2012 ========================================= MILP cases that are slightly pathological ========================================= H. Mittelmann (mittelmann@asu.edu) CPLEX-12.4.0.0: CPLEX GUROBI-5.0.0: GUROBI ug[scip/cpx]: FSCIP-Parallel development version of SCIP CBC-2.7.7: CBC XPRESS-7.3.1: XPRESS SCIP-3.0.0: serial SCIP with CPLEX These codes were run with the MIPLIB2010 scripts in default mode on an Intel Xeon X5680 (32GB, Linux, 64 bits, 2*6 cores) on problems from here. Times given are elapsed CPU seconds. Time limit 3 hrs. Available memory 24GB. This benchmark is not giving a representative impression of the relative performance of the codes. Table for 12 threads, Result files per solver, Log files per solver Scaled geometric mean of runtimes and problems solved (24 total) -------------------------------------------------- CBC CPLEX FSCIP GUROBI SCIP XPRESS -------------------------------------------------- 13.4 1 6.23 1.37 6.53 1.84 5 17 14 21 14 15 -------------------------------------------------- 25

Overview of Talk Current and Selected(*) Benchmarks Parallel LP benchmarks MILP benchmark (MIPLIB2010) Feasibility/Infeasibility Detection benchmarks (MIPLIB2010) slightly pathological MILP cases MINLP benchmark Conclusions 26

============================================================================== MINLP benchmarh with GAMS and AMPL solvers on 155 convex and 252 general cases ============================================================================== Stefan Vigerske and Hans Mittelmann 9-27-2012 For benchmark results of solvers with GAMS interface we refer to this excerpt of the ISMP 2012 talk by Stefan Vigerske Updated and more detailed results with GAMS 23.9.2 are located here: MINLPLib results, convex MINLP To benchmark solvers with AMPL interface, the GAMS files used above were converted to AMPL and writ The shifted geometric means of runtimes in the GAMS benchmarks are BARON Couenne LINDO-global SCIP+CPLEX ======== ---------------------------------------------------- MINLPLIB 175.6 236.5 262.1 135.4 ======== ---------------------------------------------------- SCIP* AlphaECP Bon-OA-Cpl Bon-Hyb Dicopt SBB =========== -------------------------------------------------------- conv MINLPs 74.7 186.5 45.1 152.1 121.6 651.8 ========== -------------------------------------------------------- 27

The shifted geometric means for the AMPL solvers are Minotaur KNITRO SCIP+CPLEX ======== -------------------------------- MINLPLIB 52.3 77.8 123.1 ======== -------------------------------- Minotaur KNITRO SCIP+CPLEX* ========== -------------------------------- conv MINLP 173.3 442.9 78.3 "*" SCIP assumes convexity ========== -------------------------------- Adjusting the means for the common solver SCIP and scaling the fastest solver to 1 the combined tables are BARON Couenne KNITRO LINDO-global Minotaur SCIP+CPLEX ======== ------------------------------------------------------------ MINLPLIB 3.06 4.11 1.49 4.56 1 2.35 ======== ------------------------------------------------------------ KNITRO SCIP AlphaECP Bon-OA Bon-Hyb Dicopt Minot SBB ========== ------------------------------------------------------------ conv MINLP 9.4 1.66 4.10 1 3.37 2.70 3.67 14.5 ========== ------------------------------------------------------------ 28

Conclusions: Declare Winners? MIPLIB-bench: Gurobi, CPLEX, XPRESS MIPLIB-feas: Gurobi, XPRESS, CPLEX MIPLIB-infeas: Gurobi, CPLEX, XPRESS Pathological: CPLEX, Gurobi, XPRESS MINLP: Minotaur, KNITRO, SCIP conv MINLP: Bonmin, SCIP, Dicopt LP: Gurobi, CPLEX, XPRESS, MOSEK 29

Thank you! 30