Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
'''
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, EasySimpleGADriver
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
# # CONMIN-specific Settings
# self.driver.itmax = 30
# self.driver.fdch = 0.00001
# self.driver.fdchm = 0.000001
# self.driver.ctlmin = 0.01
# self.driver.delfun = 0.001
#
# # NEWSUMT-specific Settings
# #self.driver.itmax = 10
#
# # COBYLA-specific Settings
# #self.driver.rhobeg = 1.0
# #self.driver.rhoend = 1.0e-4
# #self.driver.maxfun = 1000
#
# # SLSQP-specific Settings
# #self.driver.accuracy = 1.0e-6
# #self.driver.maxiter = 50
#
# # Genetic-specific Settings
# #self.driver.population_size = 90
# #self.driver.crossover_rate = 0.9
# #self.driver.mutation_rate = 0.02
# #self.selection_method = 'rank'
@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), 1e-2),
#(EasyPyOptSparseSLSQP(),??),
(EasySimpleGADriver(), 1e-4)][-1:])
def test_optimizers(driver, tol, topfarm_generator):
tf = topfarm_generator(driver)
tf.optimize()
tb_pos = tf.turbine_positions
#tf.plot_comp.show()
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)