Newer
Older
'''
Created on 17. maj 2018
@author: mmpe
'''
from topfarm import TopFarm
import numpy as np
import pytest
from topfarm.cost_models.dummy import DummyCost, DummyCostPlotComp
from topfarm.plotting import NoPlot
from topfarm.easy_drivers import EasyScipyOptimizeDriver,\
initial = [[6, 0], [6, -8], [1, 1]] # initial turbine layouts
optimal = np.array([[2.5, -3], [6, -7], [4.5, -3]]) # desired turbine layouts
boundary = [(0, 0), (6, 0), (6, -10), (0, -10)] # turbine boundaries
desired = [[3, -3], [7, -7], [4, -3]] # desired turbine layouts
@pytest.fixture
def topfarm_generator():
def _topfarm_obj(driver):
#plot_comp = DummyCostPlotComp(desired)
plot_comp = NoPlot()
return TopFarm(initial, DummyCost(desired), 2, plot_comp=plot_comp, boundary=boundary, driver=driver)
return _topfarm_obj
@pytest.mark.parametrize('driver,tol', [(EasyScipyOptimizeDriver(), 1e-4),
(EasyScipyOptimizeDriver(tol=1e-3), 1e-2),
(EasyScipyOptimizeDriver(maxiter=13), 1e-1),
(EasyScipyOptimizeDriver(optimizer='COBYLA', tol=1e-3, disp=False), 1e-2),
(EasyPyOptSparseSLSQP(), 1e-4),
(EasyPyOptSparseIPOPT(), 1e-4),
#(EasySimpleGADriver(), 1e-4)
][:])
def test_optimizers(driver, tol, topfarm_generator):
if driver.__class__.__name__=="PyOptSparseMissingDriver":
print(driver.__class__.__name__)
tf.optimize()
tb_pos = tf.turbine_positions
assert sum((tb_pos[2] - tb_pos[0])**2) > 2**2 - tol # check min spacing
assert tb_pos[1][0] < 6 + tol # check within border
np.testing.assert_array_almost_equal(tb_pos, optimal, -int(np.log10(tol)))
#print (tb_pos - optimal)