Harigami
ログイン
Harigamiは、ログイン不要のコード共有サービスです。コードの投稿後に発行されるURLでコードを共有できます。
PythonやRubyなど一部の言語は、投稿後にオンラインで実行することもできます。
誰でも無料で使えて、広告もありません。コードレビューやスニペットの代わりに使ってみてください。


詳細設定
+
anonymous タイトルなし
Python
突然のメッセージを致したことを先にお詫び致します。 
 
弊社はインターネット上にある「悪いクチコミ」が入っている企業様(店舗様)に対して、裏技を使って、戦略的にイメージをよくする、webサービスを提供しております。 
 
「悪いクチコミ」の存在は、イメージダウン、集客数減少、売上劇減・・・と、負の連鎖です。 
 
ポータルサイト(口コミサイト)にて、良い口コミを増やすことで、ネガティブなイメージは払拭され、良いイメージに変貌します。 
 
そうすることで、口コミ件数UP、評価点数UP、ランキングUP、集客売上UPするという、夢のようなサービスです。 
 
6年間の実績と、1,000件以上のあらゆるジャンルのクライアントを成功させておりますので、お力になれることと自信を持っております。 
 
詳しくはこちらのページをご覧下さい。https://bazzcop.company/ 
 
お気軽にお問い合わせいただけたらと思います。 
 
 
 
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 
*発信者名:BazzCop.ltd 
お問い合わせ後の連絡につきましては、担当より連絡をさせて頂きます。 
*Mail:kuchikomimarketing@gmail.com 
※配信がご不要の方は、誠にお手数ですがこちらのメールに配信停止希望とご返信ください。メールアドレスではなく「送信されたWEBサイトのURL」を記載下さい。
  • 0
  • 0
anonymous タイトルなし
Python
<?php
    //入力フォームへの処理
    if((isset($_POST["name"]))&&(isset($_POST["comment"]))){

        //名前の指定
        $name = ($_POST["name"]);

        //コメントの指定
        $comment = ($_POST["comment"]);

        //入力番号の指定
        $number = count(file("test4.txt"))+1;

        //投稿日時の指定
        $date = date("Y-m-d");
    
        //test4.txtに番号・名前・コメント・投稿時間を保存
        $fill = fopen("test4.txt", "a");
        fwrite($fill,($number."<>".$name."<>".$comment."<>".$date).PHP_EOL);
        fclose($fill);
    }
    
    //入力データを配列に
    $input_lines = file("test4.txt");

  

    //削除フォームへの処理
    if(isset($_POST["del_num"])){
        $delete_number = ($_POST["del_num"]);
        $input_lines = file("test4.txt");
        $input_linenum = count(file("test4.txt"));
        var_dump($input_linenum);
        for($i=0; $i<$input_linenum; $i++){
            $input_list = explode("<>",$input_lines[$i]);
            $num = $input_list[0];
            if($num == $delete_number){
                array_splice($input_lines, $i, 1);
            break;
            }
        }
    file_put_contents("test4.txt", $input_lines);
    }



    ?>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
</head>
<body>
    <!-- 入力フォーム -->
    <form action="" method="post">
    名前:</br>
    <input type="text" name="name"><br/>
    コメント:</br>
    <textarea name="comment" cols="30" rows="5"></textarea><br/>
    <input type="submit" value="送信"/><br/>
    </form>
    
    <br/><br/>

    <!-- 削除フォーム -->
    <form action="" method="post">
    削除番号の指定:</>
    <input type="text" name="del_num"></br>
    <input type="submit" value="送信"/>
    </form>

    <br/><br/><br/>
    
    <!-- ループ表示 -->
    <?php
        $input_lines = file("test4.txt");
        $input_linenum = count(file("test4.txt"));

        

        for($i=0; $i<$input_linenum; $i++){
            $get_list = explode("<>","$input_lines[$i]");
            $num = $get_list[0];
            $nam = $get_list[1];
            $com = $get_list[2];
            $dat = $get_list[3];

            //namが存在するときのみ表示
            if($nam){
                echo ($num.":".$nam."/".$com."/".$dat);
            }
        }
    ?>
   
</body>
</html>
  • 0
  • 0
anonymous タイトルなし
PHP
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
</head>
<body>
    <?php
    //入力フォームへの処理
    if((isset($_POST["name"]))&&(isset($_POST["comment"]))){

        //名前の指定
        $name = ($_POST["name"]);

        //コメントの指定
        $comment = ($_POST["comment"]);

        //入力番号の指定
        $number = count(file("test4.txt"))+1;

        //投稿日時の指定
        $date = date("Y-m-d");
    
        //test4.txtに番号・名前・コメント・投稿時間を保存
        $fill = fopen("test4.txt", "a");
        fwrite($fill,($number."<>".$name."<>".$comment."<>".$date).PHP_EOL);
        fclose($fill);
    }
    
    //入力データを配列に
    $input_lines = file("test4.txt");

    ?>

    <?php

    //削除フォームへの処理
    if(isset($_POST["del_num"])){
        $delete_number = ($_POST["del_num"]);
        $input_lines = file("test4.txt");
        $input_linenum = count(file("test4.txt"));
        for($i=0; $i<$input_linenum; $i++){
            $input_list = explode("<>",trim($input_lines[$i]));
            $num = $input_list[0];
            if($num == $delete_number){
                array_splice($input_lines, $i, 1);
            }
        }
    file_put_contents("test4.txt", $input_lines);
    }

    ?>
</body>
</html>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
</head>
<body>
    <!-- 入力フォーム -->
    <form action="kadai_2_4.php" method="post">
    名前:</br>
    <input type="text" name="name"><br/>
    コメント:</br>
    <textarea name="comment" cols="30" rows="5"></textarea><br/>
    <input type="submit" value="送信"/><br/>
    </form>
    
    <br/><br/>

    <!-- 削除フォーム -->
    <form action="kadai_2_4.php" method="post">
    削除番号の指定:</>
    <input type="text" name="del_num"></br>
    <input type="submit" value="送信"/>
    </form>

    <br/><br/><br/>
    
    <!-- ループ表示 -->
    <?php
        $input_lines = file("test4.txt");
        $input_linenum = count(file("test4.txt"));

        for($i=0; $i<$input_linenum; $i++){
            $get_list = explode("<>","$input_lines[$i]");
            $num = $get_list[0];
            $nam = $get_list[1];
            $com = $get_list[2];
            $dat = $get_list[3];

            //namが存在するときのみ表示
            if($nam){
                echo ($num.":".$nam."/".$com."/".$dat);
            }
        }
    ?>
   
</body>
</html>
  • 0
  • 0
anonymous タイトルなし
PHP
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
</head>
<body>
    <?php
    //入力フォームへの処理
    if((isset($_POST["name"]))&&(isset($_POST["comment"]))){

        //名前の指定
        $name = ($_POST["name"]);

        //コメントの指定
        $comment = ($_POST["comment"]);

        //入力番号の指定
        $number = count(file("test4.txt"))+1;

        //投稿日時の指定
        $date = date("Y-m-d");
    
        //test4.txtに番号・名前・コメント・投稿時間を保存
        $fill = fopen("test4.txt", "a");
        fwrite($fill,($number."<>".$name."<>".$comment."<>".$date).PHP_EOL);
        fclose($fill);
    }
    
    //入力データを配列に
    $input_lines = file("test4.txt");

    ?>

    <?php

    //削除フォームへの処理
    if(isset($_POST["del_num"])){
        $delete_number = ($_POST["del_num"]);
        $input_lines = file("test4.txt");
        $input_linenum = count(file("test4.txt"));
        for($i=0; $i<$input_linenum; $i++){
            $input_list = explode("<>",trim($input_lines[$i]));
            $num = $input_list[0];
            if($num == $delete_number){
                array_splice($input_lines, $i, 1);
            }
        }
    file_put_contents("test4.txt", $input_lines);
    }

    ?>
</body>
</html>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
</head>
<body>
    <!-- 入力フォーム -->
    <form action="kadai_2_4.php" method="post">
    名前:</br>
    <input type="text" name="name"><br/>
    コメント:</br>
    <textarea name="comment" cols="30" rows="5"></textarea><br/>
    <input type="submit" value="送信"/><br/>
    </form>
    
    <br/><br/>

    <!-- 削除フォーム -->
    <form action="kadai_2_4.php" method="post">
    削除番号の指定:</>
    <input type="text" name="del_num"></br>
    <input type="submit" value="送信"/>
    </form>

    <br/><br/><br/>
    
    <!-- ループ表示 -->
    <?php
        $input_lines = file("test4.txt");
        $input_linenum = count(file("test4.txt"));

        for($i=0; $i<$input_linenum; $i++){
            $get_list = explode("<>","$input_lines[$i]");
            $num = $get_list[0];
            $nam = $get_list[1];
            $com = $get_list[2];
            $dat = $get_list[3];

            //namが存在するときのみ表示
            if($nam){
                echo ($num.":".$nam."/".$com."/".$dat);
            }
        }
    ?>
   
</body>
</html>
  • 0
  • 0
anonymous タイトルなし
C++
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>

#define GENE 20 //個数
#define BIT 8 //箱の数
#define MAX 30 //量の最大値
#define GENERATION 30 // 世代数
#define CROSSOVER 0.2 // 交伹率
#define MUTATION 0.05 // 突然変異率

//構造体の定義
struct Gene
{
	int quantitiy[BIT]; //量
	int price[BIT]; //価格
	int bit[BIT]; //入れるか入れないか
	int sum_price; //価格の合計値
	int sum_quantity; //量の合計値
}gene[GENE], gene2;

struct Elite
{
	int sum_price;
	int sum_quantity;
}elite;

int generation_count;

void input()
{
	for (int i = 0; i < GENE; i++)
	{
		FILE *file;
		errno_t error;
		error = fopen_s(&file, "data.txt", "r");

		for (int j = 0; j < BIT; j++)
		{
			fscanf_s(file, "%d,%d", &gene[i].quantitiy[j], &gene[i].price[j]);

			//遺伝子の初期化
			gene[i].bit[j] = rand() % 2;
			//printf("%2d,%2d,%2d\n", gene[i].quantitiy[j], gene[i].price[j], gene[i].bit[j]);
		}
		fclose(file);
		//printf("**************************\n");
	}
	return;
}

void calculation()
{
	for (int i = 0; i < GENE; i++)
	{
		gene[i].sum_price = 0;
		gene[i].sum_quantity = 0;

		for (int j = 0; j < BIT; j++)
		{
			if (gene[i].bit[j] == 1)
			{
				gene[i].sum_price += gene[i].price[j];
			}
			if (gene[i].bit[j] == 1)
			{
				gene[i].sum_quantity += gene[i].quantitiy[j];
			}
		}
		//printf("%2d, %2d\n",gene[i].sum_quantity, gene[i].sum_price);
	}
	//printf("**************************\n");
}

void evalution()
{
	for (int  i = 0; i < GENE; i++)
	{

		if (gene[i].sum_quantity > MAX)
		{
			gene[i].sum_price = -1 * gene[i].sum_price;
		}
		//printf("%2d, %2d\n", gene[i].sum_quantity, gene[i].sum_price);
	}
	//printf("**************************\n");
}

void sort()
{

	//printf(" 量 価格\n");
	for (int i = 0; i < GENE; ++i)
	{
		for (int j = i+1; j<GENE; ++j)
		{
			if (gene[i].sum_price < gene[j].sum_price)
			{
				gene2 = gene[i];
				gene[i] = gene[j];
				gene[j] = gene2; 
			}
		}
		//printf("%2d, %2d\n", gene[i].sum_quantity, gene[i].sum_price);
	}

	for (int i = 0; i < GENE; i++)
	{
		if (gene[i].sum_price < 0)
		{
			gene[i].sum_price = -1 * gene[i].sum_price;
		}
	}

	for (int i = 0; i < 4; i++)
	{
		gene[GENERATION-i] = gene[i];
	}

	elite.sum_price = gene[0].sum_price;
	elite.sum_quantity = gene[0].sum_quantity;

	printf(" elite  %3d  %3d\n", elite.sum_quantity, elite.sum_price);

	for (int i = 0; i < BIT; i++)
	{
		printf("%d ", gene[0].bit[i]);
	}
	printf("\n");
}

void crosscover()
{
	int point /*交叉する位置*/, random_gene1 /*1つ目の親個体*/, random_gene2 /*2つ目の親個体*/, bit2 /*入れ物*/;

	for (int i = 0; i < (int)(GENE * CROSSOVER); i++)
	{
		point = rand() % (BIT - 2) + 2; // 交叉する位置をランダムで選択
		random_gene1 = rand() % (GENE - 1) + 1; // 1つ目の親個体

		do
		{
			random_gene2 = rand() % (GENE - 1) + 1; //2つ目の親個体
		} while (random_gene2 == random_gene1); //random_gene1とrandom_gene2が同じだったらrandom_gene2を選択し直し

		// 交叉
		for (int j = point; j < BIT; j++)
		{
			bit2 = gene[random_gene1].bit[j];
			gene[random_gene1].bit[j] = gene[random_gene2].bit[j];
			gene[random_gene2].bit[j] = bit2;
		}
	}
}

void mutation()
{
	int random_bit/*突然変異させる遺伝子*/, random_gene/*突然変異させる個体*/, mutation_bit/*突然変異後の値*/;

	for (int i = 0;i < (int)(GENE * MUTATION);i++) 
	{
		random_bit = rand() % (BIT - 2) + 1; // 突然変異させる遺伝子をランダムで選択
		random_gene = rand() % (GENE - 1) + 1; // 突然変異させる個体をランダムで選択

		do
		{
			mutation_bit = rand() % (BIT - random_bit) + random_bit;

		} while (gene[random_gene].bit[random_bit] == mutation_bit); // 元の遺伝子とは違うものが出るまで繰り返し

		gene[random_gene].bit[random_bit] = mutation_bit;

	}
}

int main()
{
	srand((unsigned)time(NULL)); // 乱数の初期化
	input();
	calculation();
	evalution();
	printf("初期値  \n");
	sort();

	for (int i = 0; i < GENERATION; i++)
	{
		printf("第%2d世代\n", i+1);
		crosscover();
		mutation();
		calculation();
		evalution();
		sort();
	}

	return 0;
}
  • 0
  • 0
anonymous タイトルなし
C++
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>

#define GENE 20 //個数
#define BIT 8 //箱の数
#define MAX 30 //量の最大値
#define GENERATION 40 // 世代数
#define CROSSOVER 0.2 // 交伹率
#define MUTATION 0.05 // 突然変異率

//構造体の定義
struct Gene
{
	int quantitiy[BIT]; //量
	int price[BIT]; //価格
	int bit[BIT]; //入れるか入れないか
	int sum_price; //価格の合計値
	int sum_quantity; //量の合計値
}gene[GENE], gene2;

struct Elite
{
	int sum_price;
	int sum_quantity;
}elite;

int generation_count;

void input()
{
	for (int i = 0; i < GENE; i++)
	{
		FILE *file;
		errno_t error;
		error = fopen_s(&file, "data.txt", "r");

		for (int j = 0; j < BIT; j++)
		{
			fscanf_s(file, "%d,%d", &gene[i].quantitiy[j], &gene[i].price[j]);

			//遺伝子の初期化
			gene[i].bit[j] = rand() % 2;
			//printf("%2d,%2d,%2d\n", gene[i].quantitiy[j], gene[i].price[j], gene[i].bit[j]);
		}
		fclose(file);
		//printf("**************************\n");
	}
	return;
}

void calculation()
{
	for (int i = 0; i < GENE; i++)
	{
		gene[i].sum_price = 0;
		gene[i].sum_quantity = 0;

		for (int j = 0; j < BIT; j++)
		{
			if (gene[i].bit[j] == 1)
			{
				gene[i].sum_price += gene[i].price[j];
			}
			if (gene[i].bit[j] == 1)
			{
				gene[i].sum_quantity += gene[i].quantitiy[j];
			}
		}
		//printf("%2d, %2d\n",gene[i].sum_quantity, gene[i].sum_price);
	}
	//printf("**************************\n");
}

void evalution()
{
	for (int  i = 0; i < GENE; i++)
	{

		if (gene[i].sum_quantity > MAX)
		{
			gene[i].sum_price = -1 * gene[i].sum_price;
		}
		//printf("%2d, %2d\n", gene[i].sum_quantity, gene[i].sum_price);
	}
	//printf("**************************\n");
}

void sort()
{

	//printf(" 量 価格\n");
	for (int i = 0; i < GENE; ++i)
	{
		for (int j = i+1; j<GENE; ++j)
		{
			if (gene[i].sum_price < gene[j].sum_price)
			{
				gene2 = gene[i];
				gene[i] = gene[j];
				gene[j] = gene2; 
			}
		}
		//printf("%2d, %2d\n", gene[i].sum_quantity, gene[i].sum_price);
	}

	for (int i = 0; i < GENE; i++)
	{
		if (gene[i].sum_price < 0)
		{
			gene[i].sum_price = -1 * gene[i].sum_price;
		}
	}

	elite.sum_price = gene[0].sum_price;
	elite.sum_quantity = gene[0].sum_quantity;

	printf(" elite  %3d  %3d\n", elite.sum_quantity, elite.sum_price);
}

void crosscover()
{
	int point /*交叉する位置*/, random_gene1 /*1つ目の親個体*/, random_gene2 /*2つ目の親個体*/, bit2 /*入れ物*/;

	for (int i = 0; i < (int)(GENE * CROSSOVER); i++)
	{
		point = rand() % (BIT - 2) + 2; // 交叉する位置をランダムで選択
		random_gene1 = rand() % (GENE - 1) + 1; // 1つ目の親個体

		do
		{
			random_gene2 = rand() % (GENE - 1) + 1; //2つ目の親個体
		} while (random_gene2 == random_gene1); //random_gene1とrandom_gene2が同じだったらrandom_gene2を選択し直し

		// 交叉
		for (int j = point; j < BIT; j++)
		{
			bit2 = gene[random_gene1].bit[j];
			gene[random_gene1].bit[j] = gene[random_gene2].bit[j];
			gene[random_gene2].bit[j] = bit2;

		}
	}
}

void mutation()
{
	int random_bit/*突然変異させる遺伝子*/, random_gene/*突然変異させる個体*/, mutation_bit/*突然変異後の値*/;

	for (int i = 0;i < (int)(GENE * MUTATION);i++) 
	{
		random_bit = rand() % (BIT - 2) + 1; // 突然変異させる遺伝子をランダムで選択
		random_gene = rand() % (GENE - 1) + 1; // 突然変異させる個体をランダムで選択

		do
		{
			mutation_bit = rand() % (BIT - random_bit) + random_bit;

		} while (gene[random_gene].bit[random_bit] == mutation_bit); // 元の遺伝子とは違うものが出るまで繰り返し

		gene[random_gene].bit[random_bit] = mutation_bit;

	}
}

int main()
{
	srand((unsigned)time(NULL)); // 乱数の初期化
	input();
	calculation();
	evalution();
	printf("初期値  \n");
	sort();

	for (int i = 0; i < GENERATION; i++)
	{
		printf("第%2d世代\n", i+1);
		crosscover();
		mutation();
		calculation();
		evalution();
		sort();
	}

	return 0;
}
  • 0
  • 0
anonymous タイトルなし
PHP
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
</head>
<body>
    <?php
    //入力フォームへの処理
    if((isset($_POST["name"]))&&(isset($_POST["comment"]))){

        //名前の指定
        $name = ($_POST["name"]);

        //コメントの指定
        $comment = ($_POST["comment"]);

        //入力番号の指定
        $number = count(file("test4.txt"))+1;

        //投稿日時の指定
        $date = date("Y-m-d");
    
        //test4.txtに番号・名前・コメント・投稿時間を保存
        $fill = fopen("test4.txt", "a");
        fwrite($fill,($number."<>".$name."<>".$comment."<>".$date).PHP_EOL);
        fclose($fill);
    }
    
    //入力データを配列に
    $input_lines = file("test4.txt");

    ?>


    <?php

    //削除フォームへの処理
    if(isset($_POST["del_num"])){
        $delete_number = ($_POST["del_num"]);
        $input_lines = file("test4.txt");
        $input_linenum = count(file("test4.txt"));
        for($i=0; $i<$input_linenum; $i++){
            $input_list = explode("<>","$input_lines[$i]");
            $num = $input_list[0];
            if($num == $delete_number){
                array_splice($input_lines, $i, 1);
            }
        }
    file_put_contents("test4.txt", $input_lines);
    }

    ?>
</body>
</html>

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
</head>
<body>  
    <form action="kadai_2_3_4.php" method="post">
    <input type="submit" value="戻る"/><br/>
    </form>
</body>
</html>
  • 0
  • 0
anonymous タイトルなし
Python
import numpy as np
a = np.array([['a', 'b', 'c'],['A', 'B', 'C']])
for i, val in enumerate(a):
    print(i, val)

for i, val in enumerate(a.flat):
    print(i, val)

for i, val in np.ndenumerate(a):
    print(i, val)
  • 0
  • 0
anonymous C++,TSP
C++
#include <stdio.h> // printf等の入出力関数を使うため
#include <stdlib.h> // randとsrandを使うため
#include <time.h> // timeを使うため
#include <math.h> // sin, cos等の数学関数を使うため

// 以下,定数の定義
#define GENE 50 // 個体数
#define BIT 20 // 遺伝子数(都市の数)
#define GENERATION 200 // 世代数
#define CROSSOVER 0.4 // 交伹率
#define MUTATION 0.4 // 突然変異率
#define INVERSE 0.4 // 逆位率
#define SELECT 0.2 // 淘汰率
#define L 4 // 表示する座標系の範囲
#define PAI 3.1415926536 // πの定義

// 以下,構造体の定義
struct Gene 
{
	char city_name[BIT]; // 都市の巡回順
	int bit[BIT]; // 遺伝子
	double distance; // 全都市を巡回し終わった時の総距離
}gene[GENE] /*個体*/, gene2 /*ソートで使うための入れ物*/;

struct Elite 
{
	char city_name[BIT];
	double distance;
}elite[GENERATION]; // 各世代の最も総距離が短い個体

// 以下,変数の定義
int generation_count = 0; // 世代数をカウントする
double city_x[BIT]; // 都市のX座標
double city_y[BIT]; // 都市のY座標

// 以下,関数の定義 都市の座標,都市の名前,遺伝子の初期化
	void initial_data()
	{
		// 円用
		double angle;

		for (int i = 0;i < BIT;i++)
		{
			angle = (double)i * 2.0 * PAI / (double)BIT;

			city_x[i] = (double)L / 2 + (double)L / 2 * cos(angle);

			city_y[i] = (double)L / 2 + (double)L / 2 * sin(angle);
		}

		for (int i = 0;i < GENE;i++) 
		{
			// 遺伝子の初期化
			for (int j = 1;j < BIT;j++) 
			{

				gene[i].bit[j] = rand() % (BIT - j) + j;

			}
		}
	}

	// 遺伝子型から表現型へ
	void generate_gene(void)
	{
		char city_name2; // 右詰の作業で使うための入れもの

		for (int i = 0;i < GENE;i++) 
		{
			// ASCII文字コードを使ってアルファベットを都市数分入力する
			for (int j = 0;j < BIT;j++) {

				gene[i].city_name[j] = 65 + j;

			}
			// 右詰
			for (int j = 1;j < BIT;j++) 
			{
				city_name2 =
					gene[i].city_name[gene[i].bit[j]];

				for (int k = gene[i].bit[j]; k>j; k--) 
				{
					gene[i].city_name[k] = gene[i].city_name[k - 1];
				}

				gene[i].city_name[j] = city_name2;
			}
		}
	}

	// 距離の計算
	void distance(void)
	{
		double x, x2, y, y2;

		for (int i = 0;i < GENE;i++)
		{

			gene[i].distance = 0.0; // gene[i].distanceの初期化
			for (int j = 0;j < BIT - 1;j++)
			{
				x = city_x[gene[i].city_name[j] - 65];

				y = city_y[gene[i].city_name[j] - 65];
				x2 = city_x[gene[i].city_name[j + 1] -65];

				y2 = city_y[gene[i].city_name[j + 1] -65];

				gene[i].distance += sqrt(pow((double)x2 - (double)x, 2) + pow((double)y2 - (double)y, 2));
			}

			x = x2;
			y = y2;
			x2 = city_x[gene[i].city_name[0] - 65];
			y2 = city_y[gene[i].city_name[0] - 65];
			gene[i].distance += sqrt(pow((double)x2 -(double)x, 2) + pow((double)y2 - (double)y, 2));
		}
	}

	// ソート
	void sort(int generation)
	{
		for (int i = 0;i < GENE - 1;i++) 
		{
			for (int j = i + 1;j < GENE;j++) 
			{
				// gene[i]とgene[j]を交換
				if (gene[i].distance > gene[j].distance) 
				{
					gene2 = gene[i]; // gene[i]を一時的にgene2に退避させておく

					gene[i] = gene[j]; //gene[i]にgene[j]を移す

					gene[j] = gene2; // gene2に退避させておいたgene[i]をgene[j]に移す
				}

			}

		}
		for (int i = 0;i < BIT;i++) 
		{
			elite[generation].city_name[i] = gene[0].city_name[i];
		}

		elite[generation].distance = gene[0].distance;
	}

	// 交叉
	void crossover(void)
	{
		int point /*交差する位置*/, random_gene1 /*1つ目の親個体*/, random_gene2 /*2つ目の親個体*/, bit2 /*入れ物*/;

		for (int i = 0;i < (int)(GENE * CROSSOVER);i++) 
		{
			point = rand() % (BIT - 2) + 2; // 交伹する位置をランダムで選択
			random_gene1 = rand() % (GENE - 1) + 1; // 1つ目の親個体

				do
				{
					random_gene2 = rand() % (GENE - 1) + 1; //2つ目の親個体
				} while (random_gene2 == random_gene1); //random_gene1とrandom_gene2が同じだったらrandom_gene2を選択し直し

						// 交伹
						for (int j = point;j < BIT;j++) 
						{
							bit2 = gene[random_gene1].bit[j];
							gene[random_gene1].bit[j] =gene[random_gene2].bit[j];

							gene[random_gene2].bit[j] = bit2;
						}

		}

	}
	// 突然変異
	void mutation(void)
	{
		int random_bit/*突然変異させる遺伝子*/, random_gene/*突然変異させる個体*/, mutation_bit/*突然変異後の値*/;

		for (int i = 0;i < (int)(GENE * MUTATION);i++) {
			random_bit = rand() % (BIT - 2) + 1; // 突然変異させる遺伝子をランダムで選択
			random_gene = rand() % (GENE - 1) + 1; // 突然変異させる個体をランダムで選択

				do 
				{
					mutation_bit = rand() % (BIT - random_bit) + random_bit;

				}while (gene[random_gene].bit[random_bit] == mutation_bit); // 元の遺伝子とは違うものが出るまで繰り返し

				gene[random_gene].bit[random_bit] = mutation_bit;

		}

	}
	// 逆位
	void inverse(void)
	{
		int random_bit1/*逆位の範囲の最初の遺伝子*/, random_bit2/*逆位の範囲の最後の遺伝子*/, random_gene/*逆位させる個体*/, center, NAME[BIT];
		char city_name2;

		for (int i = 0;i < (int)(GENE * INVERSE);i++) {

			random_bit1 = rand() % (BIT - 2) + 1; // 逆位始めの遺伝子をランダムで選択

			random_bit2 = rand() % (BIT - (random_bit1 + 1)) + random_bit1 + 1; // 逆位終わりの遺伝子をランダムで選択

			center = (random_bit2 - random_bit1 + 1) / 2; // 逆位の範囲÷2(小数点以下切り捨て)

			random_gene = rand() % (GENE - 1) + 1; // 逆位させる個体をランダムに選択

				// 逆位
				for (int j = 0;j < center;j++) 
				{
					city_name2 = gene[random_gene].city_name[random_bit1 + j];

					gene[random_gene].city_name[random_bit1 + j] = gene[random_gene].city_name[random_bit2 - j];

					gene[random_gene].city_name[random_bit2 - j] = city_name2;
				}

			for (int j = 0;j < BIT;j++)
			{
				NAME[j] = 65 + j;
			}

			// 都市順から遺伝子へ変換
			for (int j = 0;j < BIT;j++) 
			{
				for (int k = j;k < BIT;k++) 
				{
					if (gene[random_gene].city_name[j] == NAME[k]) 
					{
						gene[random_gene].bit[j] = k;
						break;
					}

				}
				// 右詰
				for (int k = gene[random_gene].bit[j];k > 0;k--) 
				{
					NAME[k] = NAME[k - 1];
				}
			}
		}
	}
	// 淘汰
	void select(void)
	{
		for (int i = 0;i < (int)(GENE * SELECT);i++) 
		{

			gene[i + (int)(GENE * (1.0 - SELECT))] = gene[i];

		}
	}

	// 世代数と巡回順を表示する
	void print(void)
	{
		printf("%3d世代目:%2.7f ", generation_count + 1, elite[generation_count].distance);



		for (int i = 0;i < BIT;i++) 
		{
			printf("%c", elite[generation_count].city_name[i]);
		}

		printf("%c\n", elite[generation_count].city_name[0]);
	}
	
	/* 一定時間ごとに実行
	void timer(int value) 
	{
		if (generation_count < GENERATION - 1) 
		{
			generation_count++;
			print();
		}
	}*/

	// メイン関数
	int main(int argc, char* argv[])
	{
		srand((unsigned)time(NULL)); // 乱数の初期化
		initial_data();
		generate_gene();
		distance();
		sort(0);

		for (int i = 1;i < GENERATION;i++)
		{
			crossover();
			mutation();
			generate_gene();
			inverse();
			distance();
			sort(i);
			select();
			sort(i);

			if (generation_count < GENERATION - 1)
			{
				generation_count++;
				print();
			}

		}

		printf("  世代数  距離       巡回順\n");
		print();

		return 0;
	}
  • 0
  • 0
anonymous タイトルなし
CSS
/* style.css */

.wrapper {
  width: 100vw;
  min-height: 100vh;
}
header {
  background: #f60;
  height: 20%;
}
.container {
  display: flex;
  height: 75%;
}
.main {
  padding: 10px;
  width: 70%;
  border: solid 4px;
}
.sub {
  padding: 10px;
  width: 30%;
  border: double 4px;
}
footer {
  background: #f60;
  height: 5%;
}

@media (max-width: 670px)
{
  .container{
    display: block;
    width: 100%;
    height: 75%;
  }
  .main {
    padding: 10px;
    width: 100%;
    min-height: 70%;
  }
  .sub {
    padding: 10px;
    width: 100%;
    min-height: 30%;
  }
}
  • 0
  • 1