kcozy's blog

いろいろ

ハル研プロコン2017惨敗メモ

ハル研プロコン2017に参加しました.

 

www.hallab.co.jp

 

やっていることは知っていましたが,参加したのは今回が初めてです.

まだ順位は確定していませんが,40位ぐらいだと思います.

とりあえずメモとしてやったことを書こうと思います.

 

問題

概要

大型のUFOと小型のUFOを操作し,全ての家に荷物を配るというミッション.各UFOには積載制限があり,UFO間での荷物の受け渡しなどを使っていかに早く配り終えるかを競います.

 

制約

  • 大型UFOの数:2台,小型UFOの数:8台
  • 大型UFOの積載量:40個,小型UFOの積載量:5個
  • 家の数:100軒以下

その他詳しくは

www.hallab.co.jp

 

自分の方針

制約を見ると,一度も中央の基地に荷物を積みに戻らないでも配り終えられるだけの積載量があることがわかります.なので,大型UFOを拠点にし,小型UFOは荷物を配り終えたら大型UFOから荷物を受け取ってまた配りに行く,という方針が良さそうな気がしました.ここで問題になるのが,どのように各UFOの行き先を割り当てるかです.

とりあえず自分は家を2つにクラスタリングし,大型をそれぞれ1台づつ,小型をクラスタ内の家の数の比で割り振るようにしました.

大型UFOの動作

大型は小型UFOに荷物を受け渡しやすいようにクラスタの中心付近の家に配達に行きます.その過程で小型UFOが荷物を欲しがっていたらそちらへ移動します.

小型UFOの動作

自身の割り振られたクラスタ内で,小型UFOの数だけクラスタリングして担当範囲を決めます.その範囲内で最短経路で荷物を配達し,積載がなくなったら大型UFOか農場の近い方へ行きます.

 

スコアの遷移

はじめに適当にクラスタリングしただけのやつで40000点ぐらいになりました.そこから配達順序を最短になるように変更したり,クラスタリングの手法を変えたりして18000後半ぐらいまで出るようになりました.

 

反省点

一番はじめにクラスタリングする手法を思いつき,そのままその方針で実装して行きました.しかし行き詰ることも多かったので,いろいろな方針を試して行くべきだとかんじました.

あと友達の話を聞いて,やはりシミュレーションなしでは限界があるように感じました.マラソンマッチに沢山出て練習するべきでした.

またブログに自分のアルゴリズムを書いているうちに,飽きて来てしまったのでもうすこし頑張りたいです.間違いがあったら教えてください.

macでFLTKを使う

とりあえずHello Worldできるとこまでです.macOSのバージョンは10.12.6,FLTKは1.3.4です.

 

Install

brewで入れます

brew install fltk 

 

Compile

サンプルコート(Hello World)をコンパイルしてみます.

Test "Hello World" code of FLTK

 

コンパイルは以下のコマンドでできるはずです.test.cppはソースコードのファイル名です.

fltk-config --compile test.cpp

 Run

コンパイルすると.appファイルが生成されます.これを実行すると結果が表示されます.

f:id:kcozy:20171012125135p:plain

 

 

SteamVRで400や308のエラーが出るのが解決するまでにやったこと

HTC VIVEを使おうとして,SteamVRを起動したら一時間前にはなかったエラーコード308のエラーが出ました.HMDを再起動したら今度はエラーコード400.原因は結局不明でしたが,おんなじような症状の方の参考になればと思い記録を残します.発生前は1ヶ月ぐらい正常に動作しているように見えました.

 

環境

ネットの解決手法をためす

とりあえずググってRedditやSteamのフォーラムにあったのが

  •  一般的な更新,再起動などの手法
  • 同一のグラボにディスプレイとHMDをつなぐ
  • マザボのHMDIポートを使わない
  • HMDIに変換をかませずにHMDをつなぐ

といった感じでした.

 

やったこと&おきたこと

自分の行ったこととその結果を時系列に載せます.

  • 再起動(SteamVR, PC),USBドライバの削除,SteamVRの再インストール
  • NVIDIA Geforce Experienceの更新
  • GPUドライバの更新
  • LINK BOXとグラボ間のHMDIケーブルの向きをタグに合わせる

LINK BOXとPCを繋ぐケーブルにはタグが付いており,それに合わせて配線し直しましたが効果は不明です.

ここまでしたらエラーの内容が変わり,エラーコード(-202)が出ました.

  • ダイレクトモードを有効にしてSteamVRを再起動
  • ディスプレイにHMD用の映像(赤い)が表示される
  • SteamVRが応答なし
  • タスクキル
  • エラーコード308

なんかエラーが変わって進捗があったと思いきや,結局元に戻りました.あきらめて全部アンインストールしました.

  • SteamとVIVEアプリを再インストール
  • 再セットアップ時にUSBドライバが何度か失敗
  • 何回かやったら成功

USBドライバのあたりでこけてるのがとても怪しいです.ここまできたら正常に動作し,Unityで実行したアプリも問題なく見れました.

 

感想

原因不明な不毛な戦いでした.

「プレステージ」を観て

プレステージ」という映画を観ました.

 

プレステージ (字幕版)
 

 

そこそこ面白かったです.Amazon Prime会員なら無料で観れます.

『名称未設定ファイル』を読んで

『名称未設定ファイル』という本を読みました.


f:id:kcozy:20170701115920j:image

 

 

名称未設定ファイル

名称未設定ファイル

 

 

この本の内容は一部Webで公開されています.

kinonoki.com

 

作者について

作者は品田遊さんです.その中身はTwitterをやってれば絶対に見かけるであろうダ・ヴィンチ・恐山さんです.

 

twitter.com

ascii.jp

 

私は物心ついたときには恐山さんのTwitterをフォローしていました.

毎週木曜日更新の,同じくインターネットが生んだインターネット太郎ことARuFaさんとともに収録されている「匿名ラジオ」を聞くとどんな方かわかると思います(キモオタラジオではない).

 


匿名ラジオ/#47「二人の本が発売されるからラジオで告知しちゃえ!」

 

表紙について

前作の「止まりだしたら走らない」同様に,本作品もイラストに凝っています.

止まりだしたら走らない

止まりだしたら走らない

 

本作の表紙も初見では意味不明ですが,中身を読むとなんとなく意味するところがつかめる気がします.

 

内容について

全17話の短編集で構成されていますが,それぞれの文量がかなり異なります.その中でも個人的に気に入った話をピックアップします(偶然全部Webで見れる作品でした).

01 猫を持ち上げるな

近代のインターネットzubuzubu人間たちが読むといいと思います.中身は猫を持ち上げることに関しての論争(いわゆる炎上)をある男が俯瞰している話です.実際におきてもおかしくないようなストーリー展開で苦笑いしてしまいます.この話はWebで読むことができます.

kinonoki.com

 

09 過程の医学

人類の幸福を追求する人間の話です.よくあるDeep Learningでシンギュラリティを超えたディストピアって感じが品田遊流に書かれています.この話もWebで読むことができます.

kinonoki.com

 

15 最後の1日

個人的に一番おすすめなのはこの話です.近代のインターネットzubuzubu学生が読むべきだと思います.特にソシャゲーマー,ツイ廃,botお人形遊びに当てはまる人は猛省できるのではないでしょうか.この話もWebで読むことができます.

kinonoki.com

 

まとめ

今日届いて読んだ勢いで感想を完走しました.インターネットを一歩引いた目線から見ていると思っている人間たちに苦笑いをさせるような作品がたくさんありました.

軽く読める本だが扱われているテーマは現代を象徴しており,非常に示唆的だった.

 


『名称未設定ファイル』品田遊 著

g++でBus error: 10が出る時の解決法

MacC++でコードを書いて,g++でコンパイルして実行ファイルをエラーなく作成していざ実行してみたら.こんな出力が出た.

Bus error: 10

なんだこれはと思いググってみたがよくわからないのでいろいろ見てたら原因がわかった.

とりあえず自分のコードで間違っていたのは二重for文の内側でi++してたとこであった.

こういうのってセグフォになるんじゃないかと思っていろいろ試したら,配列をグローバルに宣言したかローカルに宣言したかでエラーが変わることに気がついた.下記のコードは実行すると違うエラーが出力されるが変わっているのは配列Aの宣言位置だけである.

 

C++でSegmentation fault: 11とBus error: 10が出てしまうときの一 ...

 

Bus errorは今回初めて出会ったので暇になったら()調べてみます.

MacではじめてのOpenGL

はじめに

やりたいと思っていたOpenGLをやり始めたのでメモ.Macgccを使います.

 

参考記事

qiita.com

qiita.com

 

プログラムの作成/実行

適当なディレクトリにC++のコード(.cppファイル)を作ります.そして以下のmain.cppのような感じでコードをかく.

 

github.com

 

コンパイル

g++ main.cpp -framework GLUT -framework OpenGL -mmacosx-version-min=10.8

できた実行ファイルを実行してみる

./a.out

するとこんな感じでウィンドウが起動する.

f:id:kcozy:20170619214758p:plain

 

おわりに

始めるのは簡単.資料は古いものが大きいがするが,使えないものは少ない気がするので地道にやっていきたい.