我正在努力在python中创建一个CMA-ES优化算法的简单示例。使用CMA-ES算法,在约束x**2 + 2*y**2 -4*x*y - 0.5*y
和-2<x<2
的情况下优化函数-1<2*(x**2)*y<1
的最简化方法是什么?
我查看了DEAP库,但无法进行有凝聚力的尝试。我发现their documentation不够直观。我也查看了cma包,但我不清楚如何实现约束。
答案 0 :(得分:2)
我看到你与DEAP文档的斗争。尽管如此,我已经编写了自己的进化计算库,最近我一直在使用DEAP进行许多概念验证,我认为它们做得很好。
继续,让我们来看看the complete example。如果您阅读文档,您将很容易看到代码。问题大小是变量的数量,因此在您的情况下,如果我理解正确,您将拥有N = 2
(x和y)。
您需要自定义健身功能而不是benchamrks.rastrigin
:
toolbox.register("evaluate", myownfunction)
约束没有实现,但是一项简单的任务。在适应度函数中,您可以使违反约束的个体无效(例如,通过指定非常高的适应度,如果最小化),并且在几代中,您的群体应该没有残留物。
这是DEAP最简单的方法,但deap.cma.Strategy
class可以扩展以覆盖/扩展任何方法,例如generate
方法,以便初始人口中的所有个体是有效的。
答案 1 :(得分:1)
在python protected void Page_Load(object sender, EventArgs e)
{
BindData();
}
public void BindData()
{
string strConnection = @"Data Source=.\sa;Initial Catalog=Northwind;Integrated Security=SSPI;";
SqlConnection con = new SqlConnection(strConnection);
con.Open();
SqlCommand cmd = new SqlCommand("select ProductId, ProductName, SupplierId from Products", con);
DataSet ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(ds);
int rowcount = ds.Tables[0].Rows.Count;
int remainingCount = 10 - (rowcount % 10);
for (int i = 0; i < remainingCount; i++)
{
DataRow row = ds.Tables[0].NewRow();
ds.Tables[0].Rows.Add(row);
}
GridView1.DataSource = ds;
GridView1.DataBind();
con.Close();
}
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
GridView1.PageIndex = e.NewPageIndex;
BindData();
}
包中,您可以指定绑定约束:
cma
对于第二个约束,如前所述,这并不简单,但是您确实可以为域外候选解决方案分配高适用性值。您只需要在这里调整import cma
opts = cma.CMAOptions()
opts.set("bounds", [[-2, None], [2, None]])
cma.fmin(cost_function, x_start, sigma_start, opts)
。这些值可能很高(高于可行域中的任何函数值),或者取决于约束违反值。
有several methods处以罚款来约束。如果是小型尺寸,则可以尝试最简单的尺寸。