C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

全過去ログを検索

<< 0 >>
■51734  Re[3]: csc.exe が見つかりません。 のエラー
□投稿者/ asami -(2010/07/15(Thu) 10:31:46)
    Microsoft Updateをしたら治りました。

    失礼しました。。。
記事No.51700 のレス /過去ログ87より / 関連記事表示
削除チェック/

■60310  TPLを利用した計算順次処理について
□投稿者/ KQ -(2011/06/27(Mon) 15:52:49)

    分類:[C#] 

    VS2010・C#・.NET 4.0でWindowsアプリケーションを作成しています。

    マルチコア並列処理(TPL)を想定しており、
    Task、Parallelを利用すれば…と思うのですが、
    .NET2.0までの知識しかないため、実装方法に悩んでいます。

    ・重い計算を行うバッチが複数ある
    ・同時に行う計算の数を指定しておく
     ↓
    「実行」ボタンクリックなどで、指定数のバッチを同時に起動して、
    1つの計算が終了したら、未実行の計算バッチを順次起動する

    (例)
    計算A、B、C、D、Eがあり、同時に3計算実行するとして、
    「実行」するとA・B・Cが起動し、どれかひとつ計算が終了したら、
    Dを起動、さらにどれかひとつ計算が終了したらEを起動する。


    何かヒントをいただければ…!
    宜しくお願いいたします。
親記事 /過去ログ101より / 関連記事表示
削除チェック/

■83775  Re[7]: Windows10のIE11において
□投稿者/ WebSurfer -(2017/04/07(Fri) 23:29:12)
    No83774 (アタ さん) に返信

    このスレッドの件に関し他に質問がなければ「解決済み」マークを付けてクローズしてください。
記事No.83764 のレス /過去ログ143より / 関連記事表示
削除チェック/

■89846  遺伝的アルゴリズム問題に関して
□投稿者/ タコカカオ -(2019/01/08(Tue) 11:49:19)

    分類:[C/C++] 

    2019/01/08(Tue) 13:36:59 編集(投稿者)
    2019/01/08(Tue) 13:36:38 編集(投稿者)
    2019/01/08(Tue) 11:53:43 編集(投稿者)
    2019/01/08(Tue) 11:50:09 編集(投稿者)

    <pre><pre>visual studio 2017
    C言語

    おおまかに
    「遺伝的アルゴリズムを用いて、個体の遺伝子の合計値が、一番大きい個体を生成(出力)する
    プログラムを作成せよ。」

    といった問題なのですが
    以下のプログラムを実行すると、出力される値の合計値が
    下がるときがあります。

    エリート個体が遺伝されてないのかな?
    とか考えましたが、とくにソースに気になる点が見つかりません。

    どこがおかしいでしょうか?

    用いている手法は
    エリート選択・ルーレット選択
    2点交叉
    です。
    ==============================================================================
    #include "pch.h"
    #include <iostream>
    #include <stdio.h>
    #include <string.h>
    #include <time.h>

    #define N 10//個体数
    #define L 5//遺伝子長
    #define MAX 10//遺伝子の構成単位に入る値の最大値

    void roulette(int fit[], int ro[], int elite);
    int main(void)
    {
    int now[N][L],//現在の世代
    next[N][L],//次世代
    fit[N],//各個体の適応度
    r[3],//乱数格納用
    ro[2];//ルーレット選択で選ばれた2個体を格納

    int best, elite, h, i, j, ge, st, en;
    srand(time(NULL));

    printf("Generation = ");
    scanf_s("%d", &ge);

    for (i = 0; i < N; i++) {
    printf("N_%d = ", i + 1);
    for (j = 0; j < L; j++) {
    now[i][j] = rand() % MAX + 1;//適当な値で個体の遺伝子を構成
    printf("%d ", now[i][j]);
    }
    printf("\n");
    }
    printf("\n");

    for (h = 0; h < ge; h++) {

    elite = 0;

    for (i = 0; i < N; i++) {
    for (j = 0, fit[i] = 0; j < L; j++) fit[i] += now[i][j];
    //保持する値の合計が大きいものが優秀
    }

    for (i = 1, best = fit[0]; i < N; i++) {//エリート選択法
    if (fit[i] > best) {
    best = fit[i];
    elite = i;//最優秀の個体の番号を得る
    }
    }

    for (j = 0; j < L; j++) next[0][j] = now[elite][j];
    //最優秀の個体は次世代にそのままコピー
    printf("Generation = %d, elite = ", h + 1);
    for (j = 0; j < L; j++) printf("%d ", now[elite][j]);//世代中最優秀の個体を表示
    printf("\n");

    for (i = 1; i < N; i++) {
    r[0] = rand() % 100 + 1;
    if (r[0] == 1) {//1%の確率で突然変異
    roulette(fit, ro, elite);//ルーレット選択法
    now[ro[0]][rand() % L] = rand() % MAX + 1;
    //適当な遺伝子座の値が適当に書き換わる
    for (j = 0; j < L; j++) next[i][j] = now[i][j];
    }
    else {//99%の確率で二点交叉
    roulette(fit, ro, elite);
    do {
    st = rand() % L;//交叉の始点
    en = rand() % L;//終点
    } while (st >= en);

    for (j = 0; j < L; j++) next[i][j] = now[ro[0]][j];//一旦個体1の遺伝子をコピー
    for (j = st; j < en; j++) next[i][j] = now[ro[1]][j];//個体2の遺伝子の一部をコピー
    }
    }

    memcpy(now, next, sizeof(now));//次世代を現在の世代とする.
    }

    return 0;
    }

    void roulette(int fit[], int ro[], int elite)
    {
    int i;
    double sumf, p[N];

    fit[elite] = 0;//エリート選択で選ばれたものは選択対象外に
    for (i = 0, sumf = 0; i < N; i++) sumf += fit[i];
    for (i = 0; i < N; i++) p[i] = fit[i] / sumf * 100;//ルーレット選択の公式

    for (i = 0; i < N; i++) {//一つ目
    if (p[i] <= rand() % 100 + 1) {//例えば確率10%なら乱数が10以下なら良い
    ro[0] = i;
    break;
    }
    }

    for (i = 0; i < N; i++) {//二つ目
    if (p[i] <= rand() % 100 + 1 && i != ro[0]) {
    ro[1] = i;
    break;
    }
    }
    }

    ============================================================================================</pre></pre>
親記事 /過去ログ155より / 関連記事表示
削除チェック/

■91575  Re[1]: EXCEL SUMIF関数をフィルターで動的に使用したい
□投稿者/ 魔界の仮面弁士 -(2019/07/09(Tue) 12:22:54)
    2019/07/09(Tue) 12:23:14 編集(投稿者)

    No91573 (鏡月 さん) に返信
    > 日付、科目、点数の箇所にフィルターを設定しフィルターで抽出したデータを国語、数学、英語毎の合計を算出する

    1. [挿入]リボンの[ピボット テーブル]を選択して、
      分析範囲:C4:E20 のオートフィルター範囲(またはテーブル)
      配置先:任意、たとえば D25
     を指定して [OK] をクリック。

    2. ピボット テーブルのフィールドとして、[科目]と[点数]をチェックする。
記事No.91573 のレス /過去ログ158より / 関連記事表示
削除チェック/

■91577  Re[2]: EXCEL SUMIF関数をフィルターで動的に使用したい
□投稿者/ 鏡月 -(2019/07/09(Tue) 13:15:14)
    No91575 (魔界の仮面弁士 さん) に返信
    > 2019/07/09(Tue) 12:23:14 編集(投稿者)
    >
    > ■No91573 (鏡月 さん) に返信
    >>日付、科目、点数の箇所にフィルターを設定しフィルターで抽出したデータを国語、数学、英語毎の合計を算出する
    >
    > 1. [挿入]リボンの[ピボット テーブル]を選択して、
    >   分析範囲:C4:E20 のオートフィルター範囲(またはテーブル)
    >   配置先:任意、たとえば D25
    >  を指定して [OK] をクリック。
    >
    > 2. ピボット テーブルのフィールドとして、[科目]と[点数]をチェックする。

    魔界の仮面弁士様
    ご回答ありがとうございます。


    教えいただきました通りやってみたのですが私のやり方が悪いとは思いますがうまくいきませんでした。

記事No.91573 のレス /過去ログ158より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -