Introduction

In this project I analyze 15 top performing tech stocks in an attempt to determine an optimal portfolio to recommend to potential investors. The rolling window used tracks 100 days of stock performance and compares a number of statistical factors including: variance, standard deviation, covariance, correlation and more. This notebook can be reran to collect the most recent 100 days of stock data.

Information gathered uses Pandas, and Pandas Data-reader which are Python libraries used to request data from Yahoo Finance's API for me to wrangle and develop models with. All of my code is sitting in a Jupyter Notebook environment so data does not need to be stored or maintained in a database. If in the future a database were to be used for deployment purposes I would most likely move data to a Heroku Dyno and set up a Postgres environment to act as the managed database. In doing so I could potentially create an interactive tool for investors to use online.

1. Import Packages Data Manipulation Packages

Importing all of the required dependencies.

In [63]:
import datetime as dt
import emoji
import matplotlib.pyplot as plt
from matplotlib import style
import numpy as np
import pandas as pd
import pandas_datareader.data as web
import plotly.graph_objs as go
import plotly.offline as offline_py
from rf import return_portfolios, optimal_portfolio
offline_py.init_notebook_mode(connected=True)
%matplotlib inline

2. Load the adjusted closings for the 15 tech stocks.

Using Pandas data-reader to pull stock data from Yahoo Finance API, create dates, retrieve data, and view data.

In [2]:
symbols = ["MSFT", "AMZN", "AAPL", "GOOG", "FB",
           "CRM", "CSCO", "NVDA", "AMD", "NFLX",
           "DOCU", "SQ", "ORCL", "TSLA", "TWTR"]
delta = dt.timedelta(days=365)
end_date = dt.datetime.now()
start_date = dt.datetime.now() - delta
stock_data = web.get_data_yahoo(symbols, start_date, end_date)

Focusing on Adjusted Close for analysis

In [3]:
close = stock_data['Adj Close']
close.head()
Out[3]:
Symbols AAPL AMD AMZN CRM CSCO DOCU FB GOOG MSFT NFLX NVDA ORCL SQ TSLA TWTR
Date
2018-12-10 167.089478 19.990000 1641.030029 137.270004 45.572453 40.689999 141.850006 1039.550049 106.022339 269.700012 151.269226 45.887451 63.380001 365.149994 33.430000
2018-12-11 166.133850 19.980000 1643.239990 136.789993 45.796131 41.660000 142.080002 1051.750000 107.007774 265.320007 147.613510 45.680977 61.779999 366.760010 34.450001
2018-12-12 166.596878 20.480000 1663.540039 140.089996 46.117062 42.400002 144.500000 1063.680054 107.490639 274.880005 148.320740 46.526558 63.650002 366.600006 36.250000
2018-12-13 168.419479 19.860001 1658.380005 141.139999 46.165691 43.150002 145.009995 1061.900024 107.855240 276.019989 148.310776 46.438068 62.900002 376.790009 35.889999
2018-12-14 163.030457 19.900000 1591.910034 137.039993 44.561028 42.889999 144.059998 1042.099976 104.485077 266.839996 145.880264 45.818630 62.139999 365.709991 35.869999

Here's our Tech Stock Universe:

In [4]:
close.plot()
plt.legend(bbox_to_anchor=(1.05, 1), loc='upper left', borderaxespad=0.)
plt.title('Daily Prices');

Stock Example

In order to demonstrate the use of log returns and resampling, I've used Google's stock (GOOG). However, these transformations are applied to all assets in my stock universe.

In [5]:
color_scheme = {
    'index': '#B6B2CF',
    'etf': '#2D3ECF',
    'tracking_error': '#6F91DE',
    'df_header': 'silver',
    'df_value': 'white',
    'df_line': 'silver',
    'heatmap_colorscale': [(0, '#6F91DE'), (0.5, 'grey'), (1, 'red')],
    'background_label': '#9dbdd5',
    'low_value': '#B6B2CF',
    'high_value': '#2D3ECF',
    'y_axis_2_text_color': 'grey',
    'shadow': 'rgba(0, 0, 0, 0.75)',
    'major_line': '#2D3ECF',
    'minor_line': '#B6B2CF',
    'main_line': 'black'}
In [6]:
def _generate_stock_trace(prices):
    return go.Scatter(
        name='Index',
        x=prices.index,
        y=prices,
        line={'color': color_scheme['major_line']})

def plot_stock(prices, title):
    config = generate_config()
    layout = go.Layout(title=title)

    stock_trace = _generate_stock_trace(prices)

    offline_py.iplot({'data': [stock_trace], 'layout': layout})
In [7]:
goog_ticker = 'GOOG'
plot_stock(close[goog_ticker], f'{goog_ticker} Stock')

Resample Adjusted Prices

Resampling the daily adjusted closing prices into monthly buckets, and selecting the last observation of each month.

In [8]:
def resample_prices(close_prices, freq='M'):
    """
    Resample close prices for each ticker and return month end prices.
    """
    return close_prices.resample(freq).last()
In [9]:
def _generate_traces(name_df_color_data):
    traces = []

    for name, df, color in name_df_color_data:
        traces.append(go.Scatter(
            name=name,
            x=df.index,
            y=df,
            mode='line',
            line={'color': color}))

    return traces

def plot_resampled_prices(df_resampled, df, title):
    config = generate_config()
    layout = go.Layout(title=title)

    traces = _generate_traces([
        ('Monthly Close', df_resampled, color_scheme['major_line']),
        ('Close', df, color_scheme['minor_line'])])

    offline_py.iplot({'data': traces, 'layout': layout})
In [10]:
monthly_close = resample_prices(close)
plot_resampled_prices(
    monthly_close.loc[:, goog_ticker],
    close.loc[:, goog_ticker],
    f'{goog_ticker} Stock - Close Vs Monthly Close')
In [11]:
def compute_log_returns(prices):
    """
    Compute log returns for each ticker.
    """
    return np.log(prices) - np.log(prices.shift(1))
In [12]:
def plot_returns(returns, title):
    layout = go.Layout(title=title)

    traces = _generate_traces([
        ('Returns', returns, color_scheme['major_line'])])

    offline_py.iplot({'data': traces, 'layout': layout})
In [13]:
monthly_close_returns = compute_log_returns(monthly_close)
plot_returns(
    monthly_close_returns.loc[:, goog_ticker],
    f'Log Returns of {goog_ticker} Stock (Monthly)')

Here are the monthly log returns of our entire data set:

Log returns are used in order to create probability distributions based on a normal dataset.

In [14]:
monthly_close_returns
Out[14]:
Symbols AAPL AMD AMZN CRM CSCO DOCU FB GOOG MSFT NFLX NVDA ORCL SQ TSLA TWTR
Date
2018-12-31 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2019-01-31 0.053687 0.279387 0.134808 0.103921 0.095167 0.210085 0.240252 0.075092 0.027769 0.237756 0.073974 0.110573 0.240640 -0.080629 0.155045
2019-02-28 0.043803 -0.036717 -0.046993 0.074047 0.090512 0.109095 -0.031940 0.003175 0.074511 0.053338 0.071594 0.037128 0.129810 0.041033 -0.086470
2019-03-31 0.092603 0.081186 0.082442 -0.032796 0.041988 -0.061895 0.031940 0.046572 0.051409 -0.004310 0.151870 0.029859 -0.080987 -0.133657 0.065999
2019-04-30 0.054901 0.079440 0.078681 0.043130 0.041971 0.089083 0.148625 0.012846 0.101963 0.038459 0.007988 0.034185 -0.028430 -0.159124 0.193762
2019-05-31 -0.132632 -0.007994 -0.081875 -0.088073 -0.072638 -0.010822 -0.085959 -0.074070 -0.050747 -0.076415 -0.288680 -0.089364 -0.161663 -0.253945 -0.090960
2019-06-30 0.122677 0.102547 0.064656 0.002111 0.050592 -0.120216 0.083889 -0.020801 0.079844 0.067687 0.192591 0.118573 0.157673 0.188012 -0.043180
2019-07-31 0.073617 0.002631 -0.014281 0.018091 0.018459 0.039638 0.006353 0.118323 0.017097 -0.128612 0.026973 -0.007791 0.103138 0.078092 0.192537
2019-08-31 -0.016598 0.032313 -0.049688 0.010111 -0.168483 -0.102315 -0.045072 -0.023771 0.014925 -0.094892 -0.006208 -0.078298 -0.262588 -0.068517 0.008004
2019-09-30 0.070423 -0.081448 -0.022995 -0.050124 0.054056 0.282313 -0.041738 0.025675 0.008451 -0.093161 0.038415 0.055482 0.001777 0.065450 -0.034589
2019-10-31 0.104976 0.157349 0.023203 0.052811 -0.031667 0.066686 0.073438 0.033168 0.030739 0.071342 0.143947 -0.005411 -0.008429 0.268061 -0.318241
2019-11-30 0.074694 0.143101 0.013496 0.040083 -0.047412 0.073104 0.050813 0.034973 0.057762 0.090583 0.076032 0.029831 0.117946 0.046592 0.030883
2019-12-31 0.012864 0.012186 -0.027701 -0.030417 -0.032981 0.059426 -0.002930 0.026960 0.002441 -0.023506 -0.021311 -0.023611 -0.016631 0.017873 -0.023569
In [15]:
def shift_returns(returns, shift_n):
    """
    Generate shifted returns
    """
    return returns.shift(shift_n)
In [16]:
prev_returns = shift_returns(monthly_close_returns, 1)

Here I have shifted the mean of the monthly log returns forward by one month in order to generate our predictions:

In [17]:
prev_returns
Out[17]:
Symbols AAPL AMD AMZN CRM CSCO DOCU FB GOOG MSFT NFLX NVDA ORCL SQ TSLA TWTR
Date
2018-12-31 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2019-01-31 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2019-02-28 0.053687 0.279387 0.134808 0.103921 0.095167 0.210085 0.240252 0.075092 0.027769 0.237756 0.073974 0.110573 0.240640 -0.080629 0.155045
2019-03-31 0.043803 -0.036717 -0.046993 0.074047 0.090512 0.109095 -0.031940 0.003175 0.074511 0.053338 0.071594 0.037128 0.129810 0.041033 -0.086470
2019-04-30 0.092603 0.081186 0.082442 -0.032796 0.041988 -0.061895 0.031940 0.046572 0.051409 -0.004310 0.151870 0.029859 -0.080987 -0.133657 0.065999
2019-05-31 0.054901 0.079440 0.078681 0.043130 0.041971 0.089083 0.148625 0.012846 0.101963 0.038459 0.007988 0.034185 -0.028430 -0.159124 0.193762
2019-06-30 -0.132632 -0.007994 -0.081875 -0.088073 -0.072638 -0.010822 -0.085959 -0.074070 -0.050747 -0.076415 -0.288680 -0.089364 -0.161663 -0.253945 -0.090960
2019-07-31 0.122677 0.102547 0.064656 0.002111 0.050592 -0.120216 0.083889 -0.020801 0.079844 0.067687 0.192591 0.118573 0.157673 0.188012 -0.043180
2019-08-31 0.073617 0.002631 -0.014281 0.018091 0.018459 0.039638 0.006353 0.118323 0.017097 -0.128612 0.026973 -0.007791 0.103138 0.078092 0.192537
2019-09-30 -0.016598 0.032313 -0.049688 0.010111 -0.168483 -0.102315 -0.045072 -0.023771 0.014925 -0.094892 -0.006208 -0.078298 -0.262588 -0.068517 0.008004
2019-10-31 0.070423 -0.081448 -0.022995 -0.050124 0.054056 0.282313 -0.041738 0.025675 0.008451 -0.093161 0.038415 0.055482 0.001777 0.065450 -0.034589
2019-11-30 0.104976 0.157349 0.023203 0.052811 -0.031667 0.066686 0.073438 0.033168 0.030739 0.071342 0.143947 -0.005411 -0.008429 0.268061 -0.318241
2019-12-31 0.074694 0.143101 0.013496 0.040083 -0.047412 0.073104 0.050813 0.034973 0.057762 0.090583 0.076032 0.029831 0.117946 0.046592 0.030883

Determine what stocks to take a long or short position in:

Below is a function that I have written to generate a list of the stocks that have increased the most of the past year -e.g. taken the most long position over the given timeframe.

In [18]:
def get_top_n(prev_returns, top_n):
    """
    Select the top performing stocks
    """
    res = pd.DataFrame(columns=prev_returns.columns)
    
    for index, row in prev_returns.iterrows():
        curr_month = row
        curr_top = pd.Series(curr_month).nlargest(top_n)
        top = list(curr_top.index.values)
        for col in res.columns:
            if(col in top):
                res.loc[index, col] = True
            else:
                res.loc[index, col] = False
                
    for index, row in res.iterrows(): 
        res.loc[index] = res.loc[index].astype('int64')
    #print(res.head())
    return res
In [26]:
def print_top(df, name, top_n=5):
    print('{} Most {}:'.format(top_n, name))
    print(', '.join(df.sum().sort_values(ascending=False).index[:top_n].values.tolist()))

Calculate and Display the Most Long Stocks and Most Short Stocks

By simply applying the multiplication of -1, I use the same function to generate the most short stocks over the provided timeframe.

In [29]:
top_bottom_n = 10
df_long = get_top_n(prev_returns, top_bottom_n)
df_short = get_top_n(-1*prev_returns, top_bottom_n)
print_top(df_long, 'Longed Stocks')
print_top(df_short, 'Shorted Stocks')
5 Most Longed Stocks:
MSFT, AAPL, NVDA, FB, DOCU
5 Most Shorted Stocks:
AMZN, ORCL, NFLX, GOOG, CRM

What if we create a portfolio of the 5 most longed stocks?

  1. Visualize the stock prices using matplotlib
  2. Calculate and visualize the daily simple rate of return
  3. Calculate and visualize the mean rates of return
  4. Calculate and visualize the variances of the returns
  5. Calculate and visualize the standard deviations of the returns
  6. Write a short thesis based on the correlations between the tech stocks
In [32]:
long_stocks = ["MSFT", "AAPL", "NVDA", "FB", "DOCU"]
In [33]:
stock_data_daily_returns = stock_data['Adj Close'][long_stocks].pct_change()
stock_data_daily_returns.plot()
plt.xlabel("Date")
plt.ylabel("ROR")
plt.title("Daily Simple Rate of Return Over time")
plt.legend(bbox_to_anchor=(1.05, 1), loc='upper left', borderaxespad=0.);

Daily simple rates of return:

In [35]:
["MSFT", "AAPL", "NVDA", "FB", "DOCU"]
fig = plt.figure(figsize=(15,15))
ax1 = fig.add_subplot(321)
ax2 = fig.add_subplot(322)
ax3 = fig.add_subplot(323)
ax4 = fig.add_subplot(324)
ax5 = fig.add_subplot(325)
ax1.plot(stock_data['Adj Close']['MSFT'].pct_change())
ax1.set_title("Microsoft")
ax2.plot(stock_data['Adj Close']['AAPL'].pct_change())
ax2.set_title("Apple")
ax3.plot(stock_data['Adj Close']['NVDA'].pct_change())
ax3.set_title("Nvidia")
ax4.plot(stock_data['Adj Close']['FB'].pct_change())
ax4.set_title("Facebook")
ax5.plot(stock_data['Adj Close']['DOCU'].pct_change())
ax5.set_title("Docusign")
plt.tight_layout()
plt.show()

Daily mean ROR:

In [36]:
# calculate daily mean
daily_mean = stock_data_daily_returns.mean()

daily_mean
Out[36]:
Symbols
MSFT    0.001533
AAPL    0.002088
NVDA    0.001702
FB      0.001581
DOCU    0.002878
dtype: float64
In [39]:
# daily mean index for the x axis
daily_mean.keys()

# grab each daily mean value for the y axis
height = []
for key in daily_mean.keys():
    height.append(daily_mean[key])

# arrange keys on x axis based on length
x_pos = np.arange(len(daily_mean.keys()))
In [40]:
# plot bars
plt.bar(x_pos, height)
 
# create names on the x-axis
plt.xticks(x_pos, daily_mean.keys())

# label chart
plt.xlabel("Tech Stocks")
plt.ylabel("Mean")
plt.title("Daily Mean Rate of Return")
plt.show()

Daily Variance:

In [43]:
# calculate variance
daily_var = stock_data_daily_returns.var()
daily_var
Out[43]:
Symbols
MSFT    0.000197
AAPL    0.000311
NVDA    0.000693
FB      0.000374
DOCU    0.000816
dtype: float64
In [44]:
# variance index for the x axis
daily_var.keys()

# grab each variance value for the y axis
height = []
for key in daily_var.keys():
    height.append(daily_var[key])
In [45]:
# plot bars
plt.bar(x_pos, height)
 
# create names on the x-axis
plt.xticks(x_pos, daily_var.keys())

# label chart
plt.xlabel("Tech Stocks")
plt.ylabel("Variance")
plt.title("Daily Variance")

# show graphic
plt.show()

Standard Deviation:

In [46]:
# calculate standard deviation
daily_std = stock_data_daily_returns.std()
daily_std
Out[46]:
Symbols
MSFT    0.014039
AAPL    0.017645
NVDA    0.026331
FB      0.019336
DOCU    0.028569
dtype: float64
In [47]:
# grab each standard deviation value for the y axis
height = []
for key in daily_std.keys():
    height.append(daily_std[key])
In [48]:
# plot bars
plt.bar(x_pos, height)
 
# create names on the x-axis
plt.xticks(x_pos, daily_std.keys())

# label chart
plt.xlabel("Tech Stocks")
plt.ylabel("Std. Dev.")
plt.title("Daily Standard Deviation")

# show graphic
plt.show()

Correlation in our portfolio:

In [89]:
corr = stock_data_daily_returns.corr()
corr
Out[89]:
Symbols MSFT AAPL NVDA FB DOCU
Symbols
MSFT 1.000000 0.671109 0.564095 0.567456 0.436929
AAPL 0.671109 1.000000 0.617088 0.538725 0.379871
NVDA 0.564095 0.617088 1.000000 0.487307 0.353498
FB 0.567456 0.538725 0.487307 1.000000 0.370899
DOCU 0.436929 0.379871 0.353498 0.370899 1.000000
In [90]:
plt.imshow(cov)
plt.colorbar()
plt.xticks(rotation='horizontal')
plt.xticks(range(len(cov)), corr.columns)
plt.yticks(range(len(cov)), corr.columns);

Covariance:

In [91]:
cov = stock_data_daily_returns.cov()
cov
Out[91]:
Symbols MSFT AAPL NVDA FB DOCU
Symbols
MSFT 0.000197 0.000166 0.000209 0.000154 0.000175
AAPL 0.000166 0.000311 0.000287 0.000184 0.000191
NVDA 0.000209 0.000287 0.000693 0.000248 0.000266
FB 0.000154 0.000184 0.000248 0.000374 0.000205
DOCU 0.000175 0.000191 0.000266 0.000205 0.000816
In [92]:
plt.imshow(cov)
plt.colorbar()
plt.xticks(rotation='horizontal')
plt.xticks(range(len(cov)), cov.columns)
plt.yticks(range(len(cov)), cov.columns);

Measuring the efficiency of this portfolio:

In [93]:
# use the covariance 
cov_monthly = monthly_close_returns[long_stocks][1:].cov()

# find the expected return
expected_returns = cov_monthly.mean()

# create a set of random portfolios
random_portfolios = return_portfolios(expected_returns, cov_monthly) 

Using Python's Cvxopt library to generate 5000 random portfolios:

In [94]:
# plot the set of random portfolios
random_portfolios.plot.scatter(x='Volatility', y='Returns', fontsize=12)

# calculate the set of portfolios on the EF
weights, returns, risks = optimal_portfolio(cov_monthly[1:])
     pcost       dcost       gap    pres   dres
 0: -4.4350e-03 -1.0070e+00  1e+00  2e-16  3e+00
 1: -4.4404e-03 -1.6998e-02  1e-02  1e-16  3e-02
 2: -4.8139e-03 -7.0983e-03  2e-03  9e-17  6e-03
 3: -6.8256e-03 -7.8126e-03  1e-03  4e-15  9e-04
 4: -6.9895e-03 -7.0053e-03  2e-05  2e-16  1e-05
 5: -6.9971e-03 -6.9972e-03  2e-07  1e-19  1e-07
 6: -6.9971e-03 -6.9971e-03  2e-09  2e-21  1e-09
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -4.4350e-03 -1.0070e+00  1e+00  0e+00  3e+00
 1: -4.4404e-03 -1.6998e-02  1e-02  9e-17  3e-02
 2: -4.8139e-03 -7.0982e-03  2e-03  2e-16  6e-03
 3: -6.8254e-03 -7.8123e-03  1e-03  2e-15  9e-04
 4: -6.9892e-03 -7.0050e-03  2e-05  2e-16  1e-05
 5: -6.9968e-03 -6.9970e-03  2e-07  2e-16  1e-07
 6: -6.9969e-03 -6.9969e-03  2e-09  1e-16  1e-09
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -4.4350e-03 -1.0070e+00  1e+00  2e-16  3e+00
 1: -4.4404e-03 -1.6998e-02  1e-02  9e-17  3e-02
 2: -4.8139e-03 -7.0980e-03  2e-03  6e-17  6e-03
 3: -6.8252e-03 -7.8119e-03  1e-03  1e-15  9e-04
 4: -6.9890e-03 -7.0048e-03  2e-05  1e-16  1e-05
 5: -6.9965e-03 -6.9967e-03  2e-07  1e-16  1e-07
 6: -6.9966e-03 -6.9966e-03  2e-09  1e-16  1e-09
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -4.4350e-03 -1.0070e+00  1e+00  0e+00  3e+00
 1: -4.4404e-03 -1.6998e-02  1e-02  2e-16  3e-02
 2: -4.8138e-03 -7.0979e-03  2e-03  8e-17  6e-03
 3: -6.8250e-03 -7.8115e-03  1e-03  2e-15  9e-04
 4: -6.9887e-03 -7.0045e-03  2e-05  3e-16  1e-05
 5: -6.9962e-03 -6.9964e-03  2e-07  2e-19  1e-07
 6: -6.9963e-03 -6.9963e-03  2e-09  2e-16  1e-09
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -4.4349e-03 -1.0070e+00  1e+00  2e-16  3e+00
 1: -4.4404e-03 -1.6998e-02  1e-02  5e-17  3e-02
 2: -4.8138e-03 -7.0977e-03  2e-03  7e-17  6e-03
 3: -6.8247e-03 -7.8110e-03  1e-03  1e-15  9e-04
 4: -6.9883e-03 -7.0041e-03  2e-05  1e-16  1e-05
 5: -6.9959e-03 -6.9960e-03  2e-07  6e-16  1e-07
 6: -6.9960e-03 -6.9960e-03  2e-09  4e-16  1e-09
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -4.4349e-03 -1.0070e+00  1e+00  0e+00  3e+00
 1: -4.4404e-03 -1.6998e-02  1e-02  4e-17  3e-02
 2: -4.8138e-03 -7.0976e-03  2e-03  1e-16  6e-03
 3: -6.8245e-03 -7.8105e-03  1e-03  3e-15  9e-04
 4: -6.9879e-03 -7.0037e-03  2e-05  1e-16  1e-05
 5: -6.9955e-03 -6.9956e-03  2e-07  3e-16  1e-07
 6: -6.9956e-03 -6.9956e-03  2e-09  2e-16  1e-09
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -4.4349e-03 -1.0070e+00  1e+00  2e-16  3e+00
 1: -4.4403e-03 -1.6998e-02  1e-02  3e-17  3e-02
 2: -4.8137e-03 -7.0974e-03  2e-03  7e-17  6e-03
 3: -6.8242e-03 -7.8100e-03  1e-03  9e-16  9e-04
 4: -6.9875e-03 -7.0033e-03  2e-05  2e-16  1e-05
 5: -6.9951e-03 -6.9952e-03  2e-07  8e-20  1e-07
 6: -6.9951e-03 -6.9951e-03  2e-09  1e-16  1e-09
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -4.4349e-03 -1.0070e+00  1e+00  2e-16  3e+00
 1: -4.4403e-03 -1.6998e-02  1e-02  2e-16  3e-02
 2: -4.8137e-03 -7.0971e-03  2e-03  1e-16  6e-03
 3: -6.8238e-03 -7.8093e-03  1e-03  2e-15  9e-04
 4: -6.9870e-03 -7.0028e-03  2e-05  2e-16  1e-05
 5: -6.9946e-03 -6.9947e-03  2e-07  2e-16  1e-07
 6: -6.9946e-03 -6.9946e-03  2e-09  1e-16  1e-09
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -4.4349e-03 -1.0070e+00  1e+00  2e-16  3e+00
 1: -4.4403e-03 -1.6997e-02  1e-02  4e-17  3e-02
 2: -4.8136e-03 -7.0969e-03  2e-03  1e-16  6e-03
 3: -6.8234e-03 -7.8086e-03  1e-03  4e-16  9e-04
 4: -6.9865e-03 -7.0022e-03  2e-05  2e-16  1e-05
 5: -6.9940e-03 -6.9942e-03  2e-07  3e-16  1e-07
 6: -6.9941e-03 -6.9941e-03  2e-09  1e-16  1e-09
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -4.4348e-03 -1.0070e+00  1e+00  2e-16  3e+00
 1: -4.4403e-03 -1.6997e-02  1e-02  1e-16  3e-02
 2: -4.8135e-03 -7.0966e-03  2e-03  1e-16  6e-03
 3: -6.8230e-03 -7.8078e-03  1e-03  4e-16  9e-04
 4: -6.9858e-03 -7.0016e-03  2e-05  1e-16  1e-05
 5: -6.9934e-03 -6.9935e-03  2e-07  1e-16  1e-07
 6: -6.9935e-03 -6.9935e-03  2e-09  1e-16  1e-09
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -4.4348e-03 -1.0070e+00  1e+00  2e-16  3e+00
 1: -4.4402e-03 -1.6997e-02  1e-02  7e-17  3e-02
 2: -4.8135e-03 -7.0963e-03  2e-03  8e-17  6e-03
 3: -6.8225e-03 -7.8069e-03  1e-03  2e-15  9e-04
 4: -6.9851e-03 -7.0009e-03  2e-05  2e-16  1e-05
 5: -6.9927e-03 -6.9928e-03  2e-07  2e-16  1e-07
 6: -6.9928e-03 -6.9928e-03  2e-09  1e-16  1e-09
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -4.4348e-03 -1.0070e+00  1e+00  2e-16  3e+00
 1: -4.4402e-03 -1.6997e-02  1e-02  1e-16  3e-02
 2: -4.8134e-03 -7.0960e-03  2e-03  8e-17  6e-03
 3: -6.8219e-03 -7.8059e-03  1e-03  2e-16  9e-04
 4: -6.9844e-03 -7.0001e-03  2e-05  2e-16  1e-05
 5: -6.9919e-03 -6.9921e-03  2e-07  2e-16  1e-07
 6: -6.9920e-03 -6.9920e-03  2e-09  1e-16  1e-09
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -4.4347e-03 -1.0070e+00  1e+00  0e+00  3e+00
 1: -4.4402e-03 -1.6996e-02  1e-02  1e-16  3e-02
 2: -4.8133e-03 -7.0956e-03  2e-03  8e-17  6e-03
 3: -6.8213e-03 -7.8048e-03  1e-03  7e-16  9e-04
 4: -6.9835e-03 -6.9992e-03  2e-05  2e-18  1e-05
 5: -6.9910e-03 -6.9912e-03  2e-07  1e-16  1e-07
 6: -6.9911e-03 -6.9911e-03  2e-09  1e-16  1e-09
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -4.4347e-03 -1.0070e+00  1e+00  0e+00  3e+00
 1: -4.4401e-03 -1.6996e-02  1e-02  8e-17  3e-02
 2: -4.8132e-03 -7.0951e-03  2e-03  2e-16  6e-03
 3: -6.8206e-03 -7.8035e-03  1e-03  6e-16  9e-04
 4: -6.9825e-03 -6.9983e-03  2e-05  2e-16  1e-05
 5: -6.9900e-03 -6.9902e-03  2e-07  1e-16  1e-07
 6: -6.9901e-03 -6.9901e-03  2e-09  1e-16  1e-09
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -4.4346e-03 -1.0070e+00  1e+00  2e-16  3e+00
 1: -4.4401e-03 -1.6996e-02  1e-02  3e-17  3e-02
 2: -4.8131e-03 -7.0946e-03  2e-03  2e-16  6e-03
 3: -6.8198e-03 -7.8021e-03  1e-03  6e-16  9e-04
 4: -6.9814e-03 -6.9972e-03  2e-05  2e-16  1e-05
 5: -6.9889e-03 -6.9891e-03  2e-07  2e-16  1e-07
 6: -6.9890e-03 -6.9890e-03  2e-09  2e-16  1e-09
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -4.4346e-03 -1.0070e+00  1e+00  2e-16  3e+00
 1: -4.4400e-03 -1.6995e-02  1e-02  6e-17  3e-02
 2: -4.8130e-03 -7.0941e-03  2e-03  2e-16  6e-03
 3: -6.8189e-03 -7.8005e-03  1e-03  2e-15  9e-04
 4: -6.9802e-03 -6.9959e-03  2e-05  3e-16  1e-05
 5: -6.9877e-03 -6.9879e-03  2e-07  8e-20  1e-07
 6: -6.9878e-03 -6.9878e-03  2e-09  2e-16  1e-09
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -4.4345e-03 -1.0070e+00  1e+00  2e-16  3e+00
 1: -4.4399e-03 -1.6995e-02  1e-02  9e-17  3e-02
 2: -4.8128e-03 -7.0935e-03  2e-03  3e-17  6e-03
 3: -6.8179e-03 -7.7987e-03  1e-03  1e-15  9e-04
 4: -6.9788e-03 -6.9945e-03  2e-05  1e-16  1e-05
 5: -6.9863e-03 -6.9865e-03  2e-07  2e-19  1e-07
 6: -6.9864e-03 -6.9864e-03  2e-09  1e-16  1e-09
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -4.4345e-03 -1.0070e+00  1e+00  1e-16  3e+00
 1: -4.4399e-03 -1.6994e-02  1e-02  5e-17  3e-02
 2: -4.8127e-03 -7.0928e-03  2e-03  5e-17  6e-03
 3: -6.8168e-03 -7.7967e-03  1e-03  2e-15  9e-04
 4: -6.9773e-03 -6.9930e-03  2e-05  2e-16  1e-05
 5: -6.9848e-03 -6.9849e-03  2e-07  1e-16  1e-07
 6: -6.9848e-03 -6.9848e-03  2e-09  1e-21  1e-09
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -4.4344e-03 -1.0070e+00  1e+00  1e-16  3e+00
 1: -4.4398e-03 -1.6994e-02  1e-02  5e-17  3e-02
 2: -4.8125e-03 -7.0920e-03  2e-03  3e-17  6e-03
 3: -6.8155e-03 -7.7944e-03  1e-03  8e-16  9e-04
 4: -6.9755e-03 -6.9912e-03  2e-05  1e-16  1e-05
 5: -6.9830e-03 -6.9832e-03  2e-07  2e-19  1e-07
 6: -6.9831e-03 -6.9831e-03  2e-09  1e-16  1e-09
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -4.4343e-03 -1.0070e+00  1e+00  4e-16  3e+00
 1: -4.4397e-03 -1.6993e-02  1e-02  1e-16  3e-02
 2: -4.8123e-03 -7.0911e-03  2e-03  5e-17  6e-03
 3: -6.8141e-03 -7.7919e-03  1e-03  3e-15  9e-04
 4: -6.9736e-03 -6.9892e-03  2e-05  3e-16  1e-05
 5: -6.9811e-03 -6.9812e-03  2e-07  1e-16  1e-07
 6: -6.9811e-03 -6.9811e-03  2e-09  2e-16  1e-09
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -4.4342e-03 -1.0070e+00  1e+00  0e+00  3e+00
 1: -4.4396e-03 -1.6992e-02  1e-02  7e-17  3e-02
 2: -4.8121e-03 -7.0902e-03  2e-03  1e-16  6e-03
 3: -6.8126e-03 -7.7891e-03  1e-03  9e-16  9e-04
 4: -6.9714e-03 -6.9870e-03  2e-05  5e-18  1e-05
 5: -6.9789e-03 -6.9790e-03  2e-07  1e-16  1e-07
 6: -6.9789e-03 -6.9789e-03  2e-09  3e-21  1e-09
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -4.4341e-03 -1.0070e+00  1e+00  3e-16  3e+00
 1: -4.4395e-03 -1.6992e-02  1e-02  9e-17  3e-02
 2: -4.8118e-03 -7.0891e-03  2e-03  8e-17  6e-03
 3: -6.8108e-03 -7.7859e-03  1e-03  4e-16  9e-04
 4: -6.9690e-03 -6.9846e-03  2e-05  2e-16  1e-05
 5: -6.9764e-03 -6.9765e-03  2e-07  3e-16  1e-07
 6: -6.9765e-03 -6.9765e-03  2e-09  3e-16  1e-09
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -4.4340e-03 -1.0070e+00  1e+00  4e-16  3e+00
 1: -4.4394e-03 -1.6991e-02  1e-02  4e-17  3e-02
 2: -4.8115e-03 -7.0878e-03  2e-03  1e-16  6e-03
 3: -6.8088e-03 -7.7823e-03  1e-03  7e-16  9e-04
 4: -6.9662e-03 -6.9818e-03  2e-05  1e-16  1e-05
 5: -6.9736e-03 -6.9738e-03  2e-07  1e-16  1e-07
 6: -6.9737e-03 -6.9737e-03  2e-09  2e-16  1e-09
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -4.4338e-03 -1.0070e+00  1e+00  2e-16  3e+00
 1: -4.4392e-03 -1.6990e-02  1e-02  8e-17  3e-02
 2: -4.8112e-03 -7.0864e-03  2e-03  2e-16  6e-03
 3: -6.8066e-03 -7.7783e-03  1e-03  2e-15  9e-04
 4: -6.9631e-03 -6.9787e-03  2e-05  1e-16  1e-05
 5: -6.9705e-03 -6.9707e-03  2e-07  1e-16  1e-07
 6: -6.9706e-03 -6.9706e-03  2e-09  1e-16  1e-09
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -4.4337e-03 -1.0070e+00  1e+00  2e-16  3e+00
 1: -4.4391e-03 -1.6989e-02  1e-02  6e-17  3e-02
 2: -4.8108e-03 -7.0849e-03  2e-03  8e-17  6e-03
 3: -6.8041e-03 -7.7739e-03  1e-03  2e-15  9e-04
 4: -6.9597e-03 -6.9752e-03  2e-05  2e-16  1e-05
 5: -6.9670e-03 -6.9672e-03  2e-07  1e-16  1e-07
 6: -6.9671e-03 -6.9671e-03  2e-09  1e-16  1e-09
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -4.4335e-03 -1.0070e+00  1e+00  2e-16  3e+00
 1: -4.4389e-03 -1.6987e-02  1e-02  8e-17  3e-02
 2: -4.8104e-03 -7.0832e-03  2e-03  8e-17  6e-03
 3: -6.8013e-03 -7.7689e-03  1e-03  7e-16  9e-04
 4: -6.9558e-03 -6.9712e-03  2e-05  2e-16  1e-05
 5: -6.9631e-03 -6.9633e-03  2e-07  1e-16  1e-07
 6: -6.9632e-03 -6.9632e-03  2e-09  1e-16  1e-09
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -4.4333e-03 -1.0070e+00  1e+00  4e-16  3e+00
 1: -4.4387e-03 -1.6986e-02  1e-02  2e-16  3e-02
 2: -4.8100e-03 -7.0812e-03  2e-03  8e-17  6e-03
 3: -6.7981e-03 -7.7633e-03  1e-03  2e-15  9e-04
 4: -6.9514e-03 -6.9668e-03  2e-05  1e-16  1e-05
 5: -6.9587e-03 -6.9589e-03  2e-07  3e-16  1e-07
 6: -6.9588e-03 -6.9588e-03  2e-09  2e-16  1e-09
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -4.4331e-03 -1.0070e+00  1e+00  2e-16  3e+00
 1: -4.4385e-03 -1.6984e-02  1e-02  6e-17  3e-02
 2: -4.8095e-03 -7.0790e-03  2e-03  7e-17  6e-03
 3: -6.7946e-03 -7.7570e-03  1e-03  7e-16  8e-04
 4: -6.9465e-03 -6.9619e-03  2e-05  2e-16  1e-05
 5: -6.9538e-03 -6.9539e-03  2e-07  2e-16  1e-07
 6: -6.9539e-03 -6.9539e-03  2e-09  2e-21  1e-09
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -4.4328e-03 -1.0070e+00  1e+00  0e+00  3e+00
 1: -4.4382e-03 -1.6982e-02  1e-02  1e-16  3e-02
 2: -4.8089e-03 -7.0766e-03  2e-03  9e-17  6e-03
 3: -6.7906e-03 -7.7500e-03  1e-03  4e-16  8e-04
 4: -6.9410e-03 -6.9563e-03  2e-05  2e-18  1e-05
 5: -6.9483e-03 -6.9484e-03  2e-07  1e-16  1e-07
 6: -6.9483e-03 -6.9483e-03  2e-09  1e-16  1e-09
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -4.4326e-03 -1.0070e+00  1e+00  2e-16  3e+00
 1: -4.4380e-03 -1.6980e-02  1e-02  9e-17  3e-02
 2: -4.8083e-03 -7.0738e-03  2e-03  5e-17  6e-03
 3: -6.7862e-03 -7.7421e-03  1e-03  7e-16  8e-04
 4: -6.9349e-03 -6.9501e-03  2e-05  2e-16  1e-05
 5: -6.9421e-03 -6.9422e-03  2e-07  1e-19  1e-07
 6: -6.9421e-03 -6.9421e-03  2e-09  1e-16  1e-09
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -4.4322e-03 -1.0070e+00  1e+00  0e+00  3e+00
 1: -4.4376e-03 -1.6978e-02  1e-02  7e-17  3e-02
 2: -4.8076e-03 -7.0708e-03  2e-03  7e-17  6e-03
 3: -6.7812e-03 -7.7333e-03  1e-03  2e-15  8e-04
 4: -6.9279e-03 -6.9431e-03  2e-05  2e-16  1e-05
 5: -6.9351e-03 -6.9352e-03  2e-07  2e-16  1e-07
 6: -6.9352e-03 -6.9352e-03  2e-09  1e-16  1e-09
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -4.4319e-03 -1.0070e+00  1e+00  0e+00  3e+00
 1: -4.4373e-03 -1.6975e-02  1e-02  6e-17  3e-02
 2: -4.8068e-03 -7.0673e-03  2e-03  8e-17  6e-03
 3: -6.7756e-03 -7.7235e-03  9e-04  2e-15  8e-04
 4: -6.9202e-03 -6.9353e-03  2e-05  1e-18  1e-05
 5: -6.9273e-03 -6.9274e-03  2e-07  2e-16  1e-07
 6: -6.9274e-03 -6.9274e-03  2e-09  1e-16  1e-09
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -4.4315e-03 -1.0070e+00  1e+00  2e-16  3e+00
 1: -4.4369e-03 -1.6973e-02  1e-02  5e-17  3e-02
 2: -4.8059e-03 -7.0635e-03  2e-03  1e-16  6e-03
 3: -6.7693e-03 -7.7125e-03  9e-04  3e-16  8e-04
 4: -6.9115e-03 -6.9265e-03  2e-05  2e-18  1e-05
 5: -6.9185e-03 -6.9187e-03  2e-07  1e-19  1e-07
 6: -6.9186e-03 -6.9186e-03  2e-09  2e-16  1e-09
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -4.4311e-03 -1.0070e+00  1e+00  1e-16  3e+00
 1: -4.4365e-03 -1.6969e-02  1e-02  9e-17  3e-02
 2: -4.8049e-03 -7.0591e-03  2e-03  6e-17  6e-03
 3: -6.7622e-03 -7.7002e-03  9e-04  4e-16  7e-04
 4: -6.9017e-03 -6.9167e-03  1e-05  2e-16  1e-05
 5: -6.9087e-03 -6.9088e-03  1e-07  1e-16  1e-07
 6: -6.9088e-03 -6.9088e-03  1e-09  3e-16  1e-09
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -4.4306e-03 -1.0070e+00  1e+00  0e+00  3e+00
 1: -4.4360e-03 -1.6966e-02  1e-02  7e-17  3e-02
 2: -4.8038e-03 -7.0543e-03  2e-03  4e-17  6e-03
 3: -6.7543e-03 -7.6864e-03  9e-04  9e-16  7e-04
 4: -6.8907e-03 -6.9056e-03  1e-05  1e-16  1e-05
 5: -6.8977e-03 -6.8978e-03  1e-07  2e-16  1e-07
 6: -6.8977e-03 -6.8977e-03  1e-09  3e-16  1e-09
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -4.4300e-03 -1.0070e+00  1e+00  0e+00  3e+00
 1: -4.4354e-03 -1.6962e-02  1e-02  7e-17  3e-02
 2: -4.8026e-03 -7.0489e-03  2e-03  1e-16  6e-03
 3: -6.7454e-03 -7.6711e-03  9e-04  2e-15  7e-04
 4: -6.8784e-03 -6.8932e-03  1e-05  3e-16  1e-05
 5: -6.8853e-03 -6.8854e-03  1e-07  1e-16  1e-07
 6: -6.8854e-03 -6.8854e-03  1e-09  2e-16  1e-09
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -4.4294e-03 -1.0070e+00  1e+00  0e+00  3e+00
 1: -4.4348e-03 -1.6957e-02  1e-02  1e-16  3e-02
 2: -4.8012e-03 -7.0428e-03  2e-03  5e-17  6e-03
 3: -6.7355e-03 -7.6539e-03  9e-04  4e-16  7e-04
 4: -6.8645e-03 -6.8793e-03  1e-05  1e-16  1e-05
 5: -6.8714e-03 -6.8715e-03  1e-07  2e-16  1e-07
 6: -6.8715e-03 -6.8715e-03  1e-09  1e-16  1e-09
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -4.4287e-03 -1.0070e+00  1e+00  2e-16  3e+00
 1: -4.4341e-03 -1.6952e-02  1e-02  2e-16  3e-02
 2: -4.7996e-03 -7.0360e-03  2e-03  1e-16  6e-03
 3: -6.7244e-03 -7.6348e-03  9e-04  2e-15  6e-04
 4: -6.8490e-03 -6.8637e-03  1e-05  2e-16  1e-05
 5: -6.8558e-03 -6.8560e-03  1e-07  2e-16  1e-07
 6: -6.8559e-03 -6.8559e-03  1e-09  2e-16  1e-09
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -4.4280e-03 -1.0069e+00  1e+00  1e-16  3e+00
 1: -4.4333e-03 -1.6946e-02  1e-02  6e-17  3e-02
 2: -4.7979e-03 -7.0284e-03  2e-03  1e-16  6e-03
 3: -6.7119e-03 -7.6134e-03  9e-04  3e-16  6e-04
 4: -6.8316e-03 -6.8462e-03  1e-05  2e-16  9e-06
 5: -6.8383e-03 -6.8385e-03  1e-07  3e-16  9e-08
 6: -6.8384e-03 -6.8384e-03  1e-09  1e-21  9e-10
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -4.4271e-03 -1.0069e+00  1e+00  2e-16  3e+00
 1: -4.4324e-03 -1.6940e-02  1e-02  2e-16  3e-02
 2: -4.7959e-03 -7.0199e-03  2e-03  4e-17  6e-03
 3: -6.6979e-03 -7.5895e-03  9e-04  4e-16  5e-04
 4: -6.8120e-03 -6.8265e-03  1e-05  2e-16  8e-06
 5: -6.8187e-03 -6.8189e-03  1e-07  1e-16  8e-08
 6: -6.8188e-03 -6.8188e-03  1e-09  1e-16  8e-10
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -4.4261e-03 -1.0069e+00  1e+00  4e-16  3e+00
 1: -4.4314e-03 -1.6932e-02  1e-02  1e-16  3e-02
 2: -4.7938e-03 -7.0104e-03  2e-03  9e-17  6e-03
 3: -6.6824e-03 -7.5629e-03  9e-04  4e-16  5e-04
 4: -6.7900e-03 -6.8044e-03  1e-05  2e-16  8e-06
 5: -6.7967e-03 -6.7969e-03  1e-07  2e-16  8e-08
 6: -6.7968e-03 -6.7968e-03  1e-09  1e-16  8e-10
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -4.4250e-03 -1.0069e+00  1e+00  0e+00  3e+00
 1: -4.4303e-03 -1.6924e-02  1e-02  1e-16  3e-02
 2: -4.7914e-03 -6.9998e-03  2e-03  1e-16  6e-03
 3: -6.6650e-03 -7.5332e-03  9e-04  7e-16  4e-04
 4: -6.7652e-03 -6.7797e-03  1e-05  2e-16  7e-06
 5: -6.7720e-03 -6.7722e-03  1e-07  1e-16  7e-08
 6: -6.7721e-03 -6.7721e-03  1e-09  2e-16  7e-10
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -4.4238e-03 -1.0069e+00  1e+00  0e+00  3e+00
 1: -4.4291e-03 -1.6915e-02  1e-02  1e-16  3e-02
 2: -4.7887e-03 -6.9880e-03  2e-03  1e-16  6e-03
 3: -6.6457e-03 -7.5001e-03  9e-04  1e-15  3e-04
 4: -6.7375e-03 -6.7519e-03  1e-05  3e-16  6e-06
 5: -6.7443e-03 -6.7445e-03  1e-07  1e-16  6e-08
 6: -6.7444e-03 -6.7444e-03  1e-09  2e-16  6e-10
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -4.4224e-03 -1.0069e+00  1e+00  1e-16  3e+00
 1: -4.4277e-03 -1.6905e-02  1e-02  1e-16  3e-02
 2: -4.7857e-03 -6.9748e-03  2e-03  9e-17  6e-03
 3: -6.6127e-03 -7.4588e-03  8e-04  7e-16  3e-04
 4: -6.7053e-03 -6.7207e-03  2e-05  7e-18  5e-06
 5: -6.7132e-03 -6.7134e-03  2e-07  1e-16  5e-08
 6: -6.7133e-03 -6.7133e-03  2e-09  3e-16  5e-10
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -4.4209e-03 -1.0069e+00  1e+00  2e-16  3e+00
 1: -4.4261e-03 -1.6893e-02  1e-02  1e-16  3e-02
 2: -4.7824e-03 -6.9600e-03  2e-03  9e-17  6e-03
 3: -6.5735e-03 -7.4120e-03  8e-04  4e-16  3e-04
 4: -6.6690e-03 -6.6858e-03  2e-05  2e-16  5e-06
 5: -6.6783e-03 -6.6785e-03  2e-07  1e-16  5e-08
 6: -6.6784e-03 -6.6784e-03  2e-09  3e-16  5e-10
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -4.4191e-03 -1.0069e+00  1e+00  1e-16  3e+00
 1: -4.4244e-03 -1.6880e-02  1e-02  1e-16  3e-02
 2: -4.7787e-03 -6.9436e-03  2e-03  7e-17  6e-03
 3: -6.5305e-03 -7.3598e-03  8e-04  1e-16  2e-04
 4: -6.6280e-03 -6.6465e-03  2e-05  2e-16  5e-06
 5: -6.6391e-03 -6.6393e-03  2e-07  1e-16  5e-08
 6: -6.6393e-03 -6.6393e-03  2e-09  3e-16  5e-10
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -4.4172e-03 -1.0069e+00  1e+00  3e-16  3e+00
 1: -4.4224e-03 -1.6866e-02  1e-02  9e-17  3e-02
 2: -4.7747e-03 -6.9252e-03  2e-03  8e-17  6e-03
 3: -6.4837e-03 -7.3020e-03  8e-04  1e-16  2e-04
 4: -6.5819e-03 -6.6025e-03  2e-05  1e-16  4e-06
 5: -6.5952e-03 -6.5954e-03  2e-07  1e-16  4e-08
 6: -6.5953e-03 -6.5954e-03  2e-09  3e-16  4e-10
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -4.4150e-03 -1.0069e+00  1e+00  0e+00  3e+00
 1: -4.4202e-03 -1.6850e-02  1e-02  1e-16  3e-02
 2: -4.7701e-03 -6.9049e-03  2e-03  8e-17  6e-03
 3: -6.4330e-03 -7.2380e-03  8e-04  1e-15  1e-04
 4: -6.5300e-03 -6.5532e-03  2e-05  2e-16  3e-06
 5: -6.5459e-03 -6.5461e-03  3e-07  6e-16  3e-08
 6: -6.5461e-03 -6.5461e-03  3e-09  2e-16  3e-10
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -4.4126e-03 -1.0068e+00  1e+00  2e-16  3e+00
 1: -4.4177e-03 -1.6831e-02  1e-02  1e-16  3e-02
 2: -4.7651e-03 -6.8822e-03  2e-03  1e-16  6e-03
 3: -6.3786e-03 -7.1673e-03  8e-04  4e-16  9e-05
 4: -6.4721e-03 -6.4981e-03  3e-05  2e-16  2e-06
 5: -6.4904e-03 -6.4909e-03  4e-07  1e-16  3e-08
 6: -6.4908e-03 -6.4908e-03  4e-09  4e-16  3e-10
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -4.4099e-03 -1.0068e+00  1e+00  1e-16  3e+00
 1: -4.4150e-03 -1.6811e-02  1e-02  9e-17  3e-02
 2: -4.7596e-03 -6.8571e-03  2e-03  7e-17  5e-03
 3: -6.3209e-03 -7.0898e-03  8e-04  4e-16  5e-05
 4: -6.4082e-03 -6.4367e-03  3e-05  2e-16  1e-06
 5: -6.4280e-03 -6.4288e-03  9e-07  1e-16  2e-08
 6: -6.4288e-03 -6.4288e-03  9e-09  2e-16  2e-10
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -4.4068e-03 -1.0068e+00  1e+00  1e-16  3e+00
 1: -4.4119e-03 -1.6788e-02  1e-02  7e-17  3e-02
 2: -4.7535e-03 -6.8292e-03  2e-03  8e-17  5e-03
 3: -6.2605e-03 -7.0051e-03  7e-04  3e-16  2e-18
 4: -6.3389e-03 -6.3689e-03  3e-05  2e-16  2e-18
 5: -6.3573e-03 -6.3593e-03  2e-06  2e-16  1e-18
 6: -6.3591e-03 -6.3592e-03  3e-08  2e-16  2e-18
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -4.4033e-03 -1.0068e+00  1e+00  2e-16  3e+00
 1: -4.4084e-03 -1.6762e-02  1e-02  1e-16  3e-02
 2: -4.7469e-03 -6.7983e-03  2e-03  1e-16  5e-03
 3: -6.1880e-03 -6.9106e-03  7e-04  2e-16  2e-18
 4: -6.2652e-03 -6.2956e-03  3e-05  1e-16  1e-18
 5: -6.2797e-03 -6.2824e-03  3e-06  2e-16  1e-18
 6: -6.2809e-03 -6.2813e-03  4e-07  2e-16  1e-18
 7: -6.2811e-03 -6.2811e-03  5e-08  1e-16  2e-18
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -4.3995e-03 -1.0067e+00  1e+00  1e-16  3e+00
 1: -4.4045e-03 -1.6733e-02  1e-02  1e-16  3e-02
 2: -4.7396e-03 -6.7642e-03  2e-03  1e-16  5e-03
 3: -6.1161e-03 -6.8108e-03  7e-04  4e-16  2e-18
 4: -6.1915e-03 -6.2191e-03  3e-05  3e-17  1e-18
 5: -6.2024e-03 -6.2036e-03  1e-06  3e-17  2e-18
 6: -6.2026e-03 -6.2026e-03  2e-08  2e-16  2e-18
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -4.3952e-03 -1.0067e+00  1e+00  2e-16  3e+00
 1: -4.4001e-03 -1.6701e-02  1e-02  1e-16  3e-02
 2: -4.7316e-03 -6.7267e-03  2e-03  6e-17  5e-03
 3: -6.0460e-03 -6.7067e-03  7e-04  1e-16  3e-18
 4: -6.1211e-03 -6.1432e-03  2e-05  2e-16  2e-18
 5: -6.1312e-03 -6.1314e-03  3e-07  2e-16  2e-18
 6: -6.1313e-03 -6.1313e-03  3e-09  1e-16  1e-18
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -4.3903e-03 -1.0067e+00  1e+00  2e-16  3e+00
 1: -4.3952e-03 -1.6665e-02  1e-02  1e-16  3e-02
 2: -4.7228e-03 -6.6853e-03  2e-03  7e-17  5e-03
 3: -5.9789e-03 -6.5997e-03  6e-04  4e-16  1e-18
 4: -6.0561e-03 -6.0724e-03  2e-05  2e-16  2e-18
 5: -6.0660e-03 -6.0662e-03  2e-07  1e-16  2e-18
 6: -6.0661e-03 -6.0661e-03  2e-09  1e-16  1e-18
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -4.3849e-03 -1.0066e+00  1e+00  0e+00  3e+00
 1: -4.3897e-03 -1.6624e-02  1e-02  9e-17  3e-02
 2: -4.7134e-03 -6.6399e-03  2e-03  3e-17  5e-03
 3: -5.9161e-03 -6.4916e-03  6e-04  4e-16  1e-18
 4: -5.9951e-03 -6.0185e-03  2e-05  3e-16  9e-19
 5: -6.0061e-03 -6.0064e-03  2e-07  2e-16  2e-18
 6: -6.0062e-03 -6.0062e-03  2e-09  2e-16  1e-18
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -4.3788e-03 -1.0066e+00  1e+00  2e-16  3e+00
 1: -4.3836e-03 -1.6579e-02  1e-02  7e-17  3e-02
 2: -4.7031e-03 -6.5903e-03  2e-03  1e-16  5e-03
 3: -5.8582e-03 -6.3845e-03  5e-04  4e-16  7e-19
 4: -5.9400e-03 -5.9627e-03  2e-05  3e-16  2e-18
 5: -5.9507e-03 -5.9510e-03  2e-07  1e-16  1e-18
 6: -5.9509e-03 -5.9509e-03  2e-09  1e-16  2e-18
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -4.3720e-03 -1.0065e+00  1e+00  0e+00  3e+00
 1: -4.3767e-03 -1.6528e-02  1e-02  9e-17  3e-02
 2: -4.6921e-03 -6.5362e-03  2e-03  5e-17  5e-03
 3: -5.8058e-03 -6.2810e-03  5e-04  2e-16  1e-18
 4: -5.8896e-03 -5.9068e-03  2e-05  2e-16  2e-18
 5: -5.8991e-03 -5.8993e-03  2e-07  1e-16  2e-18
 6: -5.8992e-03 -5.8992e-03  2e-09  2e-16  1e-18
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -4.3643e-03 -1.0065e+00  1e+00  2e-16  3e+00
 1: -4.3690e-03 -1.6471e-02  1e-02  1e-16  3e-02
 2: -4.6803e-03 -6.4775e-03  2e-03  1e-16  5e-03
 3: -5.7590e-03 -6.1833e-03  4e-04  1e-16  1e-18
 4: -5.8424e-03 -5.8542e-03  1e-05  3e-16  1e-18
 5: -5.8506e-03 -5.8507e-03  1e-07  1e-16  2e-18
 6: -5.8507e-03 -5.8507e-03  1e-09  2e-16  2e-18
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -4.3558e-03 -1.0064e+00  1e+00  1e-16  3e+00
 1: -4.3604e-03 -1.6407e-02  1e-02  2e-16  3e-02
 2: -4.6677e-03 -6.4140e-03  2e-03  7e-17  5e-03
 3: -5.7174e-03 -6.0935e-03  4e-04  1e-16  2e-18
 4: -5.7967e-03 -5.8078e-03  1e-05  2e-16  1e-18
 5: -5.8045e-03 -5.8046e-03  1e-07  1e-16  1e-18
 6: -5.8046e-03 -5.8046e-03  1e-09  2e-16  1e-18
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -4.3462e-03 -1.0063e+00  1e+00  0e+00  3e+00
 1: -4.3508e-03 -1.6335e-02  1e-02  1e-16  3e-02
 2: -4.6544e-03 -6.3458e-03  2e-03  2e-16  4e-03
 3: -5.6801e-03 -6.0130e-03  3e-04  1e-16  1e-18
 4: -5.7527e-03 -5.7632e-03  1e-05  1e-16  3e-18
 5: -5.7603e-03 -5.7604e-03  1e-07  1e-16  1e-18
 6: -5.7603e-03 -5.7603e-03  1e-09  1e-16  2e-18
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -4.3355e-03 -1.0063e+00  1e+00  0e+00  3e+00
 1: -4.3400e-03 -1.6255e-02  1e-02  1e-16  3e-02
 2: -4.6404e-03 -6.2729e-03  2e-03  7e-17  4e-03
 3: -5.6460e-03 -5.9423e-03  3e-04  1e-16  3e-18
 4: -5.7099e-03 -5.7198e-03  1e-05  1e-16  2e-18
 5: -5.7172e-03 -5.7173e-03  1e-07  1e-16  1e-18
 6: -5.7173e-03 -5.7173e-03  1e-09  6e-17  1e-18
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -4.3235e-03 -1.0062e+00  1e+00  0e+00  3e+00
 1: -4.3279e-03 -1.6166e-02  1e-02  4e-17  3e-02
 2: -4.6257e-03 -6.1955e-03  2e-03  6e-17  4e-03
 3: -5.6137e-03 -5.8809e-03  3e-04  2e-16  1e-18
 4: -5.6677e-03 -5.6772e-03  1e-05  2e-16  1e-18
 5: -5.6748e-03 -5.6750e-03  1e-07  1e-16  2e-18
 6: -5.6749e-03 -5.6749e-03  1e-09  6e-17  2e-18
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -4.3100e-03 -1.0061e+00  1e+00  0e+00  3e+00
 1: -4.3145e-03 -1.6065e-02  1e-02  1e-16  3e-02
 2: -4.6105e-03 -6.1142e-03  2e-03  1e-16  4e-03
 3: -5.5792e-03 -5.8275e-03  2e-04  2e-16  1e-05
 4: -5.6253e-03 -5.6349e-03  1e-05  2e-16  3e-07
 5: -5.6325e-03 -5.6327e-03  2e-07  1e-16  3e-09
 6: -5.6327e-03 -5.6327e-03  2e-09  1e-16  3e-11
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -4.2950e-03 -1.0060e+00  1e+00  0e+00  3e+00
 1: -4.2994e-03 -1.5953e-02  1e-02  1e-16  3e-02
 2: -4.5948e-03 -6.0295e-03  1e-03  7e-17  4e-03
 3: -5.5394e-03 -5.7799e-03  2e-04  3e-16  4e-05
 4: -5.5824e-03 -5.5923e-03  1e-05  1e-16  1e-06
 5: -5.5897e-03 -5.5900e-03  3e-07  6e-17  1e-08
 6: -5.5900e-03 -5.5900e-03  3e-09  2e-16  1e-10
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -4.2782e-03 -1.0058e+00  1e+00  2e-16  3e+00
 1: -4.2826e-03 -1.5827e-02  1e-02  7e-17  3e-02
 2: -4.5787e-03 -5.9423e-03  1e-03  7e-17  4e-03
 3: -5.4995e-03 -5.7333e-03  2e-04  2e-16  6e-05
 4: -5.5388e-03 -5.5490e-03  1e-05  1e-16  2e-06
 5: -5.5457e-03 -5.5463e-03  5e-07  3e-16  1e-08
 6: -5.5462e-03 -5.5462e-03  6e-09  2e-16  1e-10
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -4.2595e-03 -1.0057e+00  1e+00  1e-16  3e+00
 1: -4.2639e-03 -1.5687e-02  1e-02  1e-16  3e-02
 2: -4.5625e-03 -5.8537e-03  1e-03  7e-17  3e-03
 3: -5.4593e-03 -5.6851e-03  2e-04  2e-16  7e-05
 4: -5.4946e-03 -5.5046e-03  1e-05  6e-17  2e-06
 5: -5.5000e-03 -5.5010e-03  9e-07  2e-16  6e-09
 6: -5.5008e-03 -5.5009e-03  3e-08  2e-16  1e-18
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -4.2385e-03 -1.0057e+00  1e+00  0e+00  3e+00
 1: -4.2430e-03 -1.5683e-02  1e-02  1e-16  3e-02
 2: -4.5429e-03 -5.7659e-03  1e-03  7e-17  3e-03
 3: -5.4185e-03 -5.6357e-03  2e-04  4e-16  7e-05
 4: -5.4498e-03 -5.4590e-03  9e-06  2e-16  2e-06
 5: -5.4530e-03 -5.4541e-03  1e-06  1e-16  3e-09
 6: -5.4534e-03 -5.4535e-03  1e-07  2e-18  2e-18
 7: -5.4534e-03 -5.4534e-03  1e-08  2e-16  1e-18
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -4.2151e-03 -1.0059e+00  1e+00  2e-16  3e+00
 1: -4.2197e-03 -1.5847e-02  1e-02  1e-16  3e-02
 2: -4.5197e-03 -5.6787e-03  1e-03  8e-17  3e-03
 3: -5.3768e-03 -5.5844e-03  2e-04  4e-16  8e-05
 4: -5.4048e-03 -5.4126e-03  8e-06  7e-17  2e-06
 5: -5.4064e-03 -5.4069e-03  5e-07  1e-16  1e-08
 6: -5.4064e-03 -5.4064e-03  7e-09  6e-17  1e-10
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -4.1890e-03 -1.0060e+00  1e+00  0e+00  3e+00
 1: -4.1938e-03 -1.6030e-02  1e-02  2e-16  3e-02
 2: -4.4947e-03 -5.6268e-03  1e-03  1e-16  3e-03
 3: -5.3331e-03 -5.5359e-03  2e-04  6e-17  1e-04
 4: -5.3601e-03 -5.3662e-03  6e-06  2e-16  2e-06
 5: -5.3610e-03 -5.3611e-03  1e-07  1e-16  2e-08
 6: -5.3610e-03 -5.3610e-03  1e-09  1e-16  2e-10
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -4.1599e-03 -1.0062e+00  1e+00  1e-16  3e+00
 1: -4.1650e-03 -1.6234e-02  1e-02  5e-17  3e-02
 2: -4.4665e-03 -5.6630e-03  1e-03  0e+00  3e-03
 3: -5.2910e-03 -5.4880e-03  2e-04  3e-16  1e-04
 4: -5.3159e-03 -5.3207e-03  5e-06  6e-17  2e-06
 5: -5.3165e-03 -5.3166e-03  6e-08  6e-17  2e-08
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -4.1274e-03 -1.0065e+00  1e+00  2e-16  3e+00
 1: -4.1329e-03 -1.6460e-02  1e-02  6e-17  3e-02
 2: -4.4375e-03 -5.6930e-03  1e-03  7e-17  3e-03
 3: -5.2545e-03 -5.4240e-03  2e-04  4e-16  8e-05
 4: -5.2721e-03 -5.2753e-03  3e-06  8e-17  1e-06
 5: -5.2724e-03 -5.2725e-03  3e-08  1e-16  1e-08
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -4.0913e-03 -1.0067e+00  1e+00  2e-16  3e+00
 1: -4.0974e-03 -1.6711e-02  1e-02  1e-16  3e-02
 2: -4.4077e-03 -5.7160e-03  1e-03  8e-17  3e-03
 3: -5.2195e-03 -5.3491e-03  1e-04  2e-16  1e-05
 4: -5.2280e-03 -5.2299e-03  2e-06  1e-16  1e-07
 5: -5.2282e-03 -5.2282e-03  2e-08  8e-17  1e-09
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -4.0512e-03 -1.0070e+00  1e+00  0e+00  3e+00
 1: -4.0579e-03 -1.6988e-02  1e-02  1e-16  3e-02
 2: -4.3767e-03 -5.7308e-03  1e-03  7e-17  3e-03
 3: -5.1664e-03 -5.2761e-03  1e-04  1e-16  9e-19
 4: -5.1829e-03 -5.1843e-03  1e-06  2e-16  1e-18
 5: -5.1831e-03 -5.1831e-03  1e-08  1e-16  8e-19
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -4.0065e-03 -1.0073e+00  1e+00  2e-16  3e+00
 1: -4.0143e-03 -1.7296e-02  1e-02  5e-17  4e-02
 2: -4.3443e-03 -5.7362e-03  1e-03  1e-16  3e-03
 3: -5.1087e-03 -5.2041e-03  1e-04  8e-17  2e-18
 4: -5.1363e-03 -5.1374e-03  1e-06  2e-18  1e-18
 5: -5.1367e-03 -5.1367e-03  1e-08  1e-16  2e-18
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -3.9570e-03 -1.0077e+00  1e+00  2e-16  3e+00
 1: -3.9661e-03 -1.7635e-02  1e-02  1e-16  4e-02
 2: -4.3101e-03 -5.7309e-03  1e-03  7e-17  3e-03
 3: -5.0494e-03 -5.1324e-03  8e-05  3e-16  2e-18
 4: -5.0878e-03 -5.0887e-03  9e-07  3e-17  4e-18
 5: -5.0882e-03 -5.0882e-03  9e-09  1e-16  3e-18
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -3.9020e-03 -1.0081e+00  1e+00  0e+00  3e+00
 1: -3.9128e-03 -1.8009e-02  1e-02  9e-17  4e-02
 2: -4.2737e-03 -5.7137e-03  1e-03  8e-17  3e-03
 3: -4.9752e-03 -5.0730e-03  1e-04  1e-16  6e-05
 4: -5.0365e-03 -5.0375e-03  1e-06  1e-16  6e-07
 5: -5.0371e-03 -5.0371e-03  1e-08  1e-16  6e-09
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -3.8412e-03 -1.0085e+00  1e+00  1e-16  3e+00
 1: -3.8542e-03 -1.8420e-02  1e-02  9e-17  4e-02
 2: -4.2347e-03 -5.6831e-03  1e-03  8e-17  3e-03
 3: -4.8954e-03 -5.0198e-03  1e-04  7e-17  1e-04
 4: -4.9818e-03 -4.9831e-03  1e-06  1e-16  1e-06
 5: -4.9827e-03 -4.9827e-03  1e-08  1e-16  1e-08
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -3.7739e-03 -1.0090e+00  1e+00  2e-16  3e+00
 1: -3.7898e-03 -1.8871e-02  2e-02  7e-17  4e-02
 2: -4.1927e-03 -5.6378e-03  1e-03  8e-17  3e-03
 3: -4.8187e-03 -4.9622e-03  1e-04  1e-16  2e-04
 4: -4.9232e-03 -4.9247e-03  2e-06  1e-16  2e-06
 5: -4.9242e-03 -4.9242e-03  2e-08  8e-17  2e-08
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -3.6996e-03 -1.0095e+00  1e+00  2e-16  3e+00
 1: -3.7190e-03 -1.9365e-02  2e-02  7e-17  4e-02
 2: -4.1470e-03 -5.5765e-03  1e-03  7e-17  3e-03
 3: -4.7426e-03 -4.9000e-03  2e-04  9e-17  2e-04
 4: -4.8598e-03 -4.8615e-03  2e-06  6e-17  2e-06
 5: -4.8609e-03 -4.8610e-03  2e-08  2e-16  2e-08
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -3.6177e-03 -1.0101e+00  1e+00  0e+00  3e+00
 1: -3.6416e-03 -1.9903e-02  2e-02  7e-17  4e-02
 2: -4.0971e-03 -5.4978e-03  1e-03  1e-16  3e-03
 3: -4.6648e-03 -4.8323e-03  2e-04  1e-16  3e-04
 4: -4.7908e-03 -4.7926e-03  2e-06  6e-17  2e-06
 5: -4.7920e-03 -4.7920e-03  2e-08  6e-17  2e-08
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -3.5277e-03 -1.0107e+00  1e+00  0e+00  3e+00
 1: -3.5571e-03 -2.0488e-02  2e-02  1e-16  5e-02
 2: -4.0424e-03 -5.4007e-03  1e-03  1e-16  3e-03
 3: -4.5836e-03 -4.7580e-03  2e-04  2e-16  3e-04
 4: -4.7152e-03 -4.7172e-03  2e-06  1e-16  2e-06
 5: -4.7165e-03 -4.7165e-03  2e-08  8e-17  2e-08
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -3.4287e-03 -1.0114e+00  1e+00  0e+00  3e+00
 1: -3.4651e-03 -2.1121e-02  2e-02  6e-17  5e-02
 2: -3.9824e-03 -5.2843e-03  1e-03  3e-17  2e-03
 3: -4.4973e-03 -4.6755e-03  2e-04  8e-17  2e-04
 4: -4.6320e-03 -4.6342e-03  2e-06  1e-16  2e-06
 5: -4.6334e-03 -4.6334e-03  2e-08  2e-20  2e-08
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -3.3203e-03 -1.0122e+00  1e+00  2e-16  3e+00
 1: -3.3651e-03 -2.1804e-02  2e-02  1e-16  5e-02
 2: -3.9162e-03 -5.1481e-03  1e-03  9e-17  2e-03
 3: -4.4046e-03 -4.5828e-03  2e-04  8e-17  2e-04
 4: -4.5402e-03 -4.5425e-03  2e-06  6e-17  1e-06
 5: -4.5416e-03 -4.5416e-03  2e-08  1e-16  1e-08
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -3.2017e-03 -1.0130e+00  1e+00  2e-16  3e+00
 1: -3.2568e-03 -2.2536e-02  2e-02  6e-17  5e-02
 2: -3.8432e-03 -4.9922e-03  1e-03  8e-17  2e-03
 3: -4.3062e-03 -4.4797e-03  2e-04  8e-17  2e-04
 4: -4.4385e-03 -4.4409e-03  2e-06  8e-17  9e-07
 5: -4.4399e-03 -4.4400e-03  2e-08  2e-16  9e-09
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -3.0723e-03 -1.0139e+00  1e+00  2e-16  3e+00
 1: -3.1399e-03 -2.3317e-02  2e-02  1e-16  5e-02
 2: -3.7615e-03 -4.9378e-03  1e-03  2e-16  2e-03
 3: -4.1810e-03 -4.3713e-03  2e-04  8e-17  2e-04
 4: -4.3253e-03 -4.3284e-03  3e-06  1e-16  3e-07
 5: -4.3270e-03 -4.3271e-03  3e-08  6e-17  3e-09
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -2.9314e-03 -1.0149e+00  1e+00  0e+00  3e+00
 1: -3.0140e-03 -2.4145e-02  2e-02  7e-17  6e-02
 2: -3.6709e-03 -4.9346e-03  1e-03  1e-16  2e-03
 3: -4.0433e-03 -4.2546e-03  2e-04  5e-17  2e-04
 4: -4.1982e-03 -4.2038e-03  6e-06  2e-18  4e-18
 5: -4.2014e-03 -4.2014e-03  6e-08  2e-19  9e-18
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -2.7784e-03 -1.0159e+00  1e+00  0e+00  3e+00
 1: -2.8789e-03 -2.5017e-02  2e-02  9e-17  6e-02
 2: -3.5715e-03 -4.9251e-03  1e-03  7e-17  2e-03
 3: -3.9004e-03 -4.1230e-03  2e-04  2e-16  2e-04
 4: -4.0557e-03 -4.0652e-03  9e-06  1e-16  3e-18
 5: -4.0613e-03 -4.0613e-03  1e-07  2e-16  5e-18
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -2.6126e-03 -1.0171e+00  1e+00  0e+00  3e+00
 1: -2.7343e-03 -2.5927e-02  2e-02  9e-17  6e-02
 2: -3.4623e-03 -4.9075e-03  1e-03  1e-16  2e-03
 3: -3.7505e-03 -3.9746e-03  2e-04  2e-16  3e-04
 4: -3.8962e-03 -3.9102e-03  1e-05  7e-17  4e-18
 5: -3.9049e-03 -3.9050e-03  2e-07  1e-16  1e-17
 6: -3.9050e-03 -3.9050e-03  2e-09  2e-16  7e-18
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -2.4334e-03 -1.0183e+00  1e+00  2e-16  3e+00
 1: -2.5798e-03 -2.6868e-02  2e-02  6e-17  6e-02
 2: -3.3423e-03 -4.8798e-03  2e-03  2e-16  2e-03
 3: -3.5923e-03 -3.8069e-03  2e-04  1e-16  2e-04
 4: -3.7184e-03 -3.7365e-03  2e-05  2e-16  1e-17
 5: -3.7300e-03 -3.7303e-03  3e-07  1e-16  1e-17
 6: -3.7303e-03 -3.7303e-03  3e-09  1e-16  7e-18
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -2.2400e-03 -1.0195e+00  1e+00  2e-16  3e+00
 1: -2.4151e-03 -2.7831e-02  3e-02  4e-17  7e-02
 2: -3.2103e-03 -4.8397e-03  2e-03  9e-17  3e-03
 3: -3.4246e-03 -3.6180e-03  2e-04  5e-17  2e-04
 4: -3.5242e-03 -3.5419e-03  2e-05  1e-16  3e-18
 5: -3.5338e-03 -3.5351e-03  1e-06  1e-16  1e-17
 6: -3.5349e-03 -3.5349e-03  5e-08  3e-19  2e-17
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -2.0319e-03 -1.0209e+00  1e+00  0e+00  3e+00
 1: -2.2399e-03 -2.8805e-02  3e-02  4e-17  7e-02
 2: -3.0651e-03 -4.7847e-03  2e-03  2e-16  3e-03
 3: -3.2466e-03 -3.4058e-03  2e-04  9e-17  2e-04
 4: -3.3259e-03 -3.3313e-03  5e-06  9e-17  5e-18
 5: -3.3293e-03 -3.3294e-03  6e-08  1e-16  5e-18
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -1.8082e-03 -1.0223e+00  1e+00  0e+00  3e+00
 1: -2.0535e-03 -2.9775e-02  3e-02  8e-17  7e-02
 2: -2.9054e-03 -4.7117e-03  2e-03  7e-17  3e-03
 3: -3.0566e-03 -3.1896e-03  1e-04  2e-16  1e-04
 4: -3.1437e-03 -3.1588e-03  2e-05  2e-16  5e-06
 5: -3.1446e-03 -3.1448e-03  2e-07  2e-16  6e-08
 6: -3.1446e-03 -3.1446e-03  2e-09  1e-16  6e-10
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -1.5681e-03 -1.0238e+00  1e+00  1e-16  3e+00
 1: -1.8553e-03 -3.0724e-02  3e-02  1e-16  8e-02
 2: -2.7297e-03 -4.6174e-03  2e-03  9e-17  4e-03
 3: -2.8533e-03 -3.0381e-03  2e-04  6e-17  3e-04
 4: -2.9734e-03 -3.0149e-03  4e-05  2e-16  2e-05
 5: -2.9781e-03 -2.9802e-03  2e-06  8e-17  5e-07
 6: -2.9792e-03 -2.9793e-03  2e-07  6e-17  3e-09
 7: -2.9793e-03 -2.9793e-03  3e-09  1e-16  2e-11
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -1.3107e-03 -1.0253e+00  1e+00  2e-16  3e+00
 1: -1.6442e-03 -3.1633e-02  3e-02  1e-16  8e-02
 2: -2.5364e-03 -4.4977e-03  2e-03  1e-16  4e-03
 3: -2.6425e-03 -2.8669e-03  2e-04  6e-17  4e-04
 4: -2.7979e-03 -2.8543e-03  6e-05  6e-17  3e-05
 5: -2.8069e-03 -2.8082e-03  1e-06  1e-16  6e-07
 6: -2.8075e-03 -2.8075e-03  1e-08  6e-17  6e-09
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -1.0347e-03 -1.0269e+00  1e+00  0e+00  3e+00
 1: -1.4187e-03 -3.2479e-02  3e-02  8e-17  8e-02
 2: -2.3237e-03 -4.3482e-03  2e-03  7e-17  4e-03
 3: -2.4236e-03 -2.6735e-03  2e-04  8e-17  5e-04
 4: -2.6047e-03 -2.6685e-03  6e-05  2e-16  5e-05
 5: -2.6146e-03 -2.6155e-03  9e-07  1e-16  6e-07
 6: -2.6149e-03 -2.6149e-03  9e-09  8e-17  6e-09
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -7.3892e-04 -1.0284e+00  1e+00  1e-16  3e+00
 1: -1.1771e-03 -3.3238e-02  3e-02  8e-17  9e-02
 2: -2.0897e-03 -4.1635e-03  2e-03  1e-16  4e-03
 3: -2.1976e-03 -2.4558e-03  3e-04  6e-17  5e-04
 4: -2.3909e-03 -2.4538e-03  6e-05  8e-17  5e-05
 5: -2.3988e-03 -2.3995e-03  7e-07  1e-16  6e-07
 6: -2.3989e-03 -2.3989e-03  7e-09  1e-16  6e-09
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -4.2147e-04 -1.0300e+00  1e+00  0e+00  3e+00
 1: -9.1698e-04 -3.3885e-02  3e-02  7e-17  9e-02
 2: -1.8325e-03 -3.9379e-03  2e-03  7e-17  5e-03
 3: -1.9675e-03 -2.2119e-03  2e-04  7e-17  5e-04
 4: -2.1533e-03 -2.2045e-03  5e-05  1e-16  4e-05
 5: -2.1563e-03 -2.1572e-03  9e-07  6e-17  6e-07
 6: -2.1567e-03 -2.1567e-03  1e-08  2e-16  6e-09
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -8.0258e-05 -1.0316e+00  1e+00  1e-16  3e+00
 1: -6.3522e-04 -3.4392e-02  3e-02  4e-17  9e-02
 2: -1.5499e-03 -3.6645e-03  2e-03  5e-17  5e-03
 3: -1.7363e-03 -1.9973e-03  3e-04  7e-17  5e-04
 4: -1.8999e-03 -1.9159e-03  2e-05  1e-16  2e-05
 5: -1.9016e-03 -1.9017e-03  2e-07  1e-16  2e-07
 6: -1.9016e-03 -1.9016e-03  2e-09  3e-17  2e-09
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0:  2.8734e-04 -1.0332e+00  1e+00  2e-16  3e+00
 1: -3.2812e-04 -3.4730e-02  3e-02  1e-16  9e-02
 2: -1.2397e-03 -3.3360e-03  2e-03  7e-17  5e-03
 3: -1.5063e-03 -1.8631e-03  4e-04  9e-17  6e-04
 4: -1.6338e-03 -1.6867e-03  5e-05  2e-16  7e-05
 5: -1.6720e-03 -1.6729e-03  1e-06  1e-16  8e-07
 6: -1.6723e-03 -1.6724e-03  1e-08  1e-16  8e-09
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0: -4.4351e-03 -1.0070e+00  1e+00  1e-16  3e+00
 1: -4.4405e-03 -1.6999e-02  1e-02  1e-16  3e-02
 2: -4.8141e-03 -7.0991e-03  2e-03  1e-16  6e-03
 3: -6.8270e-03 -7.8151e-03  1e-03  2e-15  9e-04
 4: -6.9914e-03 -7.0072e-03  2e-05  2e-16  1e-05
 5: -6.9990e-03 -6.9992e-03  2e-07  2e-16  1e-07
 6: -6.9991e-03 -6.9991e-03  2e-09  3e-16  1e-09
Optimal solution found.

Above I have generated a pool of 5000 random portfolios comprised of different combinations of the five longest stocks.

The following line (if uncommented) will generate a CSV filed called "all_five" that contains all risk and return values for all data points associated with our "longest portfolio".

In [1]:
# pd.DataFrame({'Risks': risks, 'Returns': returns}).to_csv('all_five.csv', index=False)
In [98]:
all_five_EF = pd.read_csv('all_five.csv')
In [100]:
# plot the set of portfolios on the EF
plt.plot(risks, returns, 'y-o')
plt.ylabel('Expected Returns',fontsize=14)
plt.xlabel('Volatility (Std. Deviation)',fontsize=14)
plt.title('Efficient Frontier')
single_asset_std=np.sqrt(np.diagonal(cov_monthly))
plt.scatter(single_asset_std,expected_returns,marker='X',color='red',s=200)
plt.plot(all_five_EF['Risks'], all_five_EF['Returns'], 'g-o')
plt.show();

Conclusion

I have analyzed 15 of the most valuable tech stocks and generated a method for determining the optimal mix of goods in our portfolio.

Although I have taken a long-investor approach, the final functions provided can be used to cycle through various mixes of any stocks an individual chooses.

In the end, I have plotted the volatility and expected returns of each of the five long stocks I have chosen, along with the efficient frontier (green) that maximizes portfolio return based on input parameters (monthly expected mean log return alongsided volatility in terms of standard deviation).

In [ ]: