- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
假设我有一个 n 个变量 x[0]..x[n-1] 的函数 y:
y = 1 + a[0][0]*x[0] + a[1][0]*x[0]^2 + a[0][1]*x[1] + a[1][1]*x[1]^2 + ...
我想找到使 y 最小化的变量 x[0]..x[n-1] 的值。该优化任务将由遗传算法执行。算法的基本步骤是:
下面是实现上述算法的两个类的代码:
解决方案类,它描述了一个单独的解决方案 x[0]..x[n-1]、与此解决方案关联的 y 值,以及函数 y = F(x[0],. .,x[n-1]).
类Pool,描述了不同解的池,以及选择、育种和变异的功能。
代码如下:
class Solution
{
double *x;
double y;
double **a; // the same for all instances
int n; // the same for all instances
public:
Solution(int,double*);
~Solution();
double yFunc();
}
class Pool
{
vector<Solution> sols;
int poolSize;
// other private members
public:
Pool(int,int,double*);
~Pool();
// other public functions
}
// construct Solution
Solution::Solution(int numX,double **coef)
{
n=numX;
// allocate memory for coefficients
a = new double*[2];
for(int i=0;i<2;i++) a[i] = new double[n];
// assign coefficients
for(int i=0;i<2;i++)
for(int j=0;j<n;j++)
a[i][j] = coef[i][j];
// generate a random solution in [-1,+1] range
srand(time(0));
for(int j=0;j<n;j++)
x[j] = 2.0*(rand()/(double)RAND_MAX-0.5);
}
// destroy Solution
Solution::~Solution()
{
delete[] x;
for(int i=0;i<2;i++) delete[] a[i];
delete[] a;
}
// define optimized function
double Solution::yFunc()
{
double sum=1.0;
for(int j=0;j<n;j++)
sum += a[0][j]*x[j]+a[1][j]*x[j]*x[j];
return sum;
}
// construct Pool
Pool::Pool(int numSols, int numX, double **coef)
{
poolSize = numSols;
for(int i=0;i<poolSize;i++)
{
Solution sol = new Solution (numX,coef);
sols.push_back(sol);
}
}
我只有一个问题:
当我构建解决方案池时,我创建了许多类 Solution 的实例,它们具有各自的 vector x[0]..x[n-1] 和相应的函数值 y。但是,函数 y = F(x[0],..,x[n-1]) 的 a[][] 系数和函数本身也会获得实例化 poolSize 次,即使它们对于所有解 vector 都是相同的.
如何修改代码,以便只创建 a[][]、F(x[0]、..、x[n-1]) 和 n 的单个实例?我听说过静态成员,但据我了解,不允许用户通过外部函数调用为其分配值。这些静态成员只能在类或不排除任何参数的静态 Solution() 函数中初始化。
即使有办法用外部用户提供的值初始化这些静态成员,它们也不是多线程安全的。因此,我正在寻找一种方法将 Solution 类的共享成员与单个成员分开,以避免共享成员 poolSize 次实例化。
最佳答案
您对静力学的理解似乎有点偏差。静态变量只是一个被类的所有实例共享的变量。您可以像访问任何非静态变量一样访问它,但您也可以在没有类实例的情况下访问它。
对于 SO 答案而言,该主题可能有点宽泛,最好通过一本优秀的 C++ 教科书来解决 - 您使用的是哪一本?也许如果您尝试修改代码以使用静态,然后发布有关您遇到的问题的问题,我们可以提供更多帮助。
关于c++ - 如何正确组织共享类(class)成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1089005/
我只想知道它们之间的区别: .class .class{ font-size:14px; } 对比: .class > .class{ font-size:14px; } 是一样的东西吗? 最佳答案
PrimeFaces 文档的以下摘录使标题中描述的两个选择器之间似乎存在差异: .ui-widget, .ui-widget .ui-widget { font-size: 90% !imp
我正在尝试选择特定值。但我遇到了一个问题。 我有两个元素,一个有 X Y,另一个有 X Y Z。 当选择 X Y Z 时,我也收到 X Y 的值...有没有办法让它寻找 X AND Y AND Z 而
.class.class 和 .class .class 有什么区别? 最佳答案 .class .class 匹配类 .class 的任何元素,这些元素是类 .class< 的另一个元素的后代/. .
我正在研究 Classname.class 和 Classname.class.toString() 并发现了一些不寻常的东西。 .class 在同一个类上运行时似乎等同于 .class。尽管 .cl
我试图在Dart中扩展列表并在此列表中使用另一个类。 这是我的示例,其中注释出了问题: import "Radio.dart"; // extends ListBase { List ra
我有一个很大的“经理”类,我认为它做得太多了,但我不确定如何将它划分为更多逻辑单元。 一般来说类主要由以下方法组成: class FooBarManager{ GetFooEntities();
我在一个文件中定义了一个抽象父类(super class),在另一个文件中定义了一个子类。我需要父类(super class)文件和堆栈跟踪报告来找到一个包含它。 但是,当它到达“extends”行时
我在 A. Alexenderscu 的现代 C++ 设计中找到了一些模板示例 作者使用以下行的地方 template class CheckingPolicy // class SmartPt
看一下这段代码: public static class A { public void doA() { } } public static class B extends A {
我有两个具有 .body 类的 div,但是,一个位于另一个具有 .box 类的 div 中 - 如下所示: 我只想为 .box 内部的 .body 设置样式...但我在下面所
我一定是遗漏了 C++ 规范中的某些内容,因为我无法解释为什么以下代码可以成功编译: class MyClass { static void fun(); }; int main() { MyClas
我正在尝试在 python 中“模拟”命名空间。我使用内部和外部类层次结构来创建我的命名空间。例如,您希望将文件(如资源)的路径保存在一个位置。我试过这样的事情: src = #path to sou
在试验 online crystal compiler 时(这太棒了),我遇到了一个我似乎无法找到解释的错误: class Person class Current < self end
在查看我的一段代码时,我陷入了如下的一条语句。 TMyObjectClass = TMyObject 类; 我有点困惑,不知道这句话是什么意思。由于 TMyObjectClass 在该语句上方没有声明
我正在编写一个简单的应用程序,以学习一些基本的Dart编程,但无法弄清楚其结构和包含的内容-我得到了一个重复的类Point 首先,我有一个叫做MouseTrack的主类。它将初始化列表并产生循环。 #
在 org.springframework.core.SerializableTypeWrapper (版本 5.2.3),第 112 行有以下代码: if (GraalDetector.in
我希望将鼠标悬停在子导航中的列表项上,以激活页面上该类别中所有项的类(不仅仅是父元素或同级元素)。有任何想法吗?这是我的意思的一个例子: img.BLUE {border:1px solid #FF
我正在通过 ClassLoader 加载类: Class clazz = urlClassLoader.loadClass(name.substring(0, name.length() - 6).r
以下简化的类在从 get() 返回值时执行不同的操作,具体取决于该类是被赋予 double 值还是数组作为模板参数: #include "array" #include "type_traits" t
我是一名优秀的程序员,十分优秀!