たくのろじぃのメモ部屋

プログラミング関係や数学、物理学などの内容を備忘録として残すブログ。

C#

Microsoft Learn で C# 入門

C#

Microsoft Learn では C# や Azure などの開発者向けコンテンツからデータサイエンスなどの研究者向けのコンテンツまで数多く揃っています。 無料で始められるので、これから「プログラミング(C#)を勉強したい」という人にもおすすめです。アカウントを登…

【C#】JSON ファイルを書きだす

去年、C# でJSONの読み込み(デシリアライズ)をやりました。 blog.takunology.jp 今回は書き出し(シリアライズ)をやります。と言っても、シンプルなJSONファイル(例えばオブジェクトや配列が1つの階層のもの)はいろんなサイトに載っているので、このブ…

Xamarin アプリから Minecraft にコマンドを投げよう

以前、マイクラ自動化でC#からRCON経由でマイクラのコマンドを投げられることを確認しました。同じC#ならばプラットフォームが異なってもできるのでは?というノリでXamarinアプリを作ってみたら意外といけました。 www.youtube.com youtube では Androidエ…

Xamarin でマイクラ自動化できそう

CoreRCON を使えば C#言語でマイクラにコマンドを送信できます。ということは、プラットフォームに関係なく C# さえ扱えればスマホからもコマンド送信ができるのでは?と思いました。 結果として、Xamarinで作ったアプリでもRCON経由でマイクラにコマンドを…

【C#】Uno Platformを使ってみた

1. Uno Platform Uno Platform は Windows, iOS, Android, Web 上で動くアプリケーションを開発できるクロスプラットフォームです。 platform.uno Xamarinと似ていますが、いくつか違う点があります。一番はUWP/WPFと同じような形式でXAMLが書けることです。…

【C#】Minecraft自動化 #8 プレイヤー自動操作

久しぶりの自動化です。今回はコマンドを投げるわけではなく、プレイヤー自身を動かすためのプログラムを書きます。 実行環境 .NET Framework 4.6 コンソールアプリケーション Minecraft 1.12.2 Forge 1. ウィンドウのアクティブ化 まずは起動しているウィン…

【C#】マイクラのプロセス名がMinecraftではなかった話

マイクラ自動化をするにあたり、プロセスに干渉して自動操作みたいなことができないかを試したくて、プロセス名を取得してみたら意外な結果を得られました。 実行環境 .NET Core 3.1 コンソールアプリケーション Minecraft 1.12.2 1. プロセスの取得 プロセ…

【C#】画素ごとの輝度を得て、テキスト形式で保存する

機械学習や画像処理にて解析を行う際には、画像を数値化しなければなりません。今回は手書き数字の画像の輝度情報を読み取り、テキストファイルにして保存する方法をメモります。 実行環境 この環境でやってみました。特別なライブラリは使用していません。 …

【C#】深層学習入門 #8 損失関数とミニバッチ学習法

ニューラルネットワークの性能を示すのに損失関数を使用します。最近では交差エントロピー誤差(クロスエントロピー)がよく用いられているようです。また、学習するための手法にミニバッチ学習法があります。大量の訓練データの中で無作為に選んで学習を行…

【C#】深層学習入門 #7 学習データを用意する

手書き数字認識をやるためにMNISTのデータセットを用いますが、画像ファイルではなく特殊なファイル形式であるため、TensorFlowなどのライブラリが必要です。また、Python用として提供されているためC#でやるには自作する必要があります。今回はMNISTを使用…

【C#】深層学習入門 #6 出力層の設計

ニューラルネットワークでは解を得る際に確率として得たいときがあります。これはソフトマックス関数を用いることによって解決できます。ソフトマックス関数は中間層よりも出力層に対して有効であり、指数関数を用いることで数値自体をいじらずに表現をシフ…

【C#】行列の積を計算する

行列の積はいろんなところで使えるので、練習がてら実装してみます。 1. 行列と型 行列は数字や文字を羅列したもので、行と列に並べて表現します。 例えば図の例では「3行3列の行列」といいます。行列式という言葉もありますが、行列とは違うモノです。 他に…

【C#】C を C# から使いたかったので DLL 化した話

最近、ある友人にC言語を教えているのですが、ふと思ったことがあります。 「C言語ってC#から読み込めるのかな?」と。 1. DLLファイルの作成 C言語やC++言語はDLL(ダイナミックリンクライブラリ)ファイルにすれば読み込めるとのことです。まずはDLLファイル…

【宣伝】QiitaにてMinecraft自動化の記事を書きました

2019年12月8日現在のブログの反響?について 本当にありがたい話で、Minecraft自動化の記事を書いてからいろんな方々にお話を伺う機会が増えました。 Microsoftに勤務されている方から直接メッセージをいただいたときは本当に嬉しく、モチベーションにつなが…

【C#】Minecraft自動化 #7 建築自動化

はじめに いよいよ建築自動化を行います。この内容が個人的に一番やりたかったことです。 建築は設計図をもとにブロックを配置していきたいと考えていますが、設計図をどうするかが問題ですね。3次元的に表したいので、CADと行きたいところですが、それはち…

【C#】Minecraft自動化 #6 迷路の生成

はじめに マイクラ自動化はもともとC#でどこまでできるかを検証するためにやってきましたが、どうやら本当に色々できるようです。 とりあえず座標移動(テレポート)と配置(ブロック配置)ができれば何でもできそうです。 今回は迷路を作ります。これは建設…

【C#】JSONファイルを読み込む

JSONファイル読み込みを行うことになったのでやり方をメモ。 1. JSONファイルの読み込み まずはjsonファイルのパスを指定して内容を読み込みます。jsonldファイルもいけます。 string FilePath = @"hoge/huga.json"; //ファイルパス var json = File.ReadAll…

【C#】Minecraft自動化 #番外編1 VSOnlineからの操作

はじめに 前回はVisual Studio Onlineを使う方法について書きました。書いているときに思いました。「もしかしてマイクラ自動化もできるのではないか?」と。早速やってみたいと思います。 お品書き CoreRCONの導入 自動化プログラムを書く いざ、実行 1. Co…

【C#】Visual Studio Online がアツい件

【朗報】VSCodeがオンラインで使えるだとっ!? ついに、ついに、ついに!! VSCodeがオンラインで利用できるようになりました! 何が嬉しいかというと、Web上でプログラミングができるのです。 「それだけ?」という人、いやいやちょっと待ってください。We…

【C#】深層学習入門 #5 ニューラルネットワークの実装1

はじめに 前回までに行列のロジックをやったので、今回はニューラルネットワークを実装してみます。まだニューラルネットワークの学習や出力層を調整する関数は考慮していません。フォワード方向のみです。 ニューラルネットワークの実装1 深層学習入門 #5 f…

【C#】深層学習入門 #4 3層ニューラルネットワークと行列計算

はじめに ニューラルネットワークは活性化関数を用いて、中間層をもつものです。しかし、具体的にどのようなロジックで解を導き出すのかがわかりません。今回は行列計算からはじまり、ニューラルネットワークのロジックに迫ります。 3層ニューラルネットワー…

【C#】深層学習入門 #3 ニューラルネットワークと活性化関数

はじめに 多層パーセプトロンは単層パーセプトロンを複数の層で重ねたものであり、ニューラルネットワークとも言えます。が、活性化関数があるかないかでニューラルネットワークかどうかが決まります。とくに最近ではReLU関数を活性化関数として扱っているも…

【C#】WPFアプリケーション入門 #13 グラフを描く

はじめに 深層学習の勉強中に、プログラムでグラフを描画したときのメモです。WPFよりもWindows Formsで作る記事が多かったので、WPFでも描けるように色々調べました。 お品書き 参照の追加 XAMLデザイン 描画ロジック 実行結果 1. 参照の追加 どうやら Wind…

【C#】深層学習入門 #2 多層パーセプトロン

はじめに 前回は単層パーセプトロンについてやりました。単純な論理回路(AND, OR, NAND) は実装できましたが、このままでは組み合わせ回路が実現できません。特にXORはNANDとORで作りますが、単層ではNANDもしくはORのどちらかしか実装できません。なので、…

【C#】深層学習入門 #1 単層パーセプトロン

はじめに 最近話題の機械学習。その中でも深層学習を扱うところが多いですね。ゲームAIをはじめ、画像認識やセキュリティなど幅広く活躍しています。 自分も興味があったのですが、アルゴリズムが苦手で敬遠していました。しかし、やっぱり機械学習やってみ…

【C#】WPFアプリケーション入門 #12 ポリモーフィズムとインターフェース

はじめに オブジェクト指向 (#10) でポリモーフィズムについて扱いました。ポリモーフィズムを意識すると、同じメソッドなのにクラスが違うと処理内容が変わるような処理ができます。つまり、操作名を共通化できます。 お品書き 今回扱う内容です。 ポリモー…

【C#】Minecraft自動化 #5 整地自動化

はじめに 前回は湧き潰し自動化を改良しました。具体的には任意の平面座標における湧き潰しを、地形を考慮して行うプログラムに直しました。 今回は指定範囲内を更地(整地)にするプログラムを作りたいと思います。整地は建築のための前準備ですね。整地し…

【C#】Minecraft自動化 #4 湧きつぶしの改良と地表判定ロジック

はじめに 前回は湧き潰しのプログラムを書きました。が、前回のプログラムのままでは障害物のブロックがあったときに、ブロックを置き換えてしまいます。ブロックを置き換えてしまうということは、地表に松明が設置されないことがあるので湧き潰しに不備が出…

【C#】Minecraft自動化 #3 範囲指定と湧きつぶし

はじめに 前回はプレイヤーの位置座標とブロックの配置方法についてやりました。今回は前回に引き続き、湧きつぶしをやりたいと思います。 湧きつぶしはフィールド上にモンスターがスポーンしないよう、暗い場所にたいまつなどの照明を一定間隔で置いていく…

【C#】Minecraft自動化 #2 プレイヤー座標の取得とブロックの配置

はじめに 前回は環境構築とマイクラに対してコマンドを送れるようにしました。今回はプレイヤーの座標を取得し、ブロックをその座標へ配置していきます。 お品書き ブロックを置くコマンド C# を用いてブロックを配置したいが... プレイヤーの座標を取得する…