irisuinwl’s diary

サークル不思議(略)入巣次元の、数学や技術的なことを書きます。

C96の報告と反省

C96お疲れさまでした。

今回は新たにリストバンド導入や、会場の変更などで新しいコミケになったと思います。

個人の感想としては夏コミでのサークル参加は初めてで、サークルスペースでも非常に暑く、一般参加者と同等に熱中症対策の必要性を実感しました。

目次:
  • 収支報告
  • プロジェクトマネジメントについて
  • 振り返り(KPT)
  • (Try)表紙の件のお詫びと施策
  • (Try)サークル主不在の施策
  • (Try)プロジェクトマネジメントへの施策
続きを読む

ABC128 - C問題が解けない

最近AtCoderに挑戦中。 直近ではABC128に出たけど、ナイーブに全探索するって発想が出なかったので30分考えて匙投げてしまった(圧倒的に経験値が足りない

atcoder.jp

ABC128のC問題が面白かったので紹介する。 回答を見ると \mathbb{F}_2上の連立方程式で解けるということなので解こうとしてるが2つWAになってしまって解けない…

#include <iostream>
#include <algorithm>
#include <string.h>
#include <cstdio>
#include <string>
#include <vector>
#include <math.h>

using namespace std;

#define MAX_INT 11

#define sum_f2(a,b) (a+b)%2

void debug_print_matrix(int matrix[MAX_INT][MAX_INT], int M, int N){
    printf("debug_print_matrix: \r\n");
    for(int i=0; i<M ;i++){
        for(int j=0; j<N ;j++){
            printf("%d ", matrix[i][j]);
        }
        printf("\r\n");
    }
}

// matrix method
void add_c_row(int matrix[MAX_INT][MAX_INT], int p, int q, int c, int N){
    // matrix[q][:] = matrix[p][:]*c+matrix[q][:]
    for (int i=0 ; i < N; i++){
        matrix[q][i] = sum_f2(matrix[q][i], matrix[p][i]*c);
    }
}

void exchange_row(int matrix[MAX_INT][MAX_INT], int p, int q, int N){
    int temp;
    for (int i=0 ; i < N; i++){
        temp = matrix[q][i];
        matrix[q][i] = matrix[p][i];
        matrix[p][i] = temp;
    }
}

void exchange_col(int matrix[MAX_INT][MAX_INT], int p, int q, int M){
    int temp;
    for (int i=0 ; i < M; i++){
        temp = matrix[i][q];
        matrix[i][q] = matrix[i][p];
        matrix[i][p] = temp;
    }
}

int get_rank(int matrix[MAX_INT][MAX_INT], int M, int N, bool hom){
    // gauss eliminationでrankを求める
    int ret = 0;
    int matrix_temp[MAX_INT][MAX_INT];
    for (int i = 0; i < M; i++){
        for (int j = 0; j < N; j++){
            matrix_temp[i][j] = matrix[i][j];
        }
    }
    int pivot = 0;
    // if (hom) N-=1;
    for (int i = 0; i < N && pivot < M; i++){
        if (matrix_temp[pivot][i] == 0){
            // 対角成分が0ならば行を交換する。
            int ex = -1;
            for (int j = pivot; j < M; j++){
                if (matrix_temp[j][i] != 0){
                    ex = j;
                    break;
                }
            }
            if (ex == -1) {
                continue;
            }
            exchange_row(matrix_temp, pivot, ex, N);
        }
        for (int j = pivot+1; j < M; j++){
            if (matrix_temp[j][i] == 1){
                add_c_row(matrix_temp, pivot, j, 1, N);
            }
        }
        // debug_print_matrix(matrix_temp, M, N);
        ret++;
        pivot++;
        
    }
    // debug_print_matrix(matrix_temp, M, N);
    return ret;
}

int main(){
    int N,M;
    int matrix[MAX_INT][MAX_INT]={0};
    int ret = -1;

    scanf("%d %d", &N, &M);

    int k;
    int s;
    for(int i = 0; i < M; i++){
        scanf("%d", &k);
        for(int j = 0; j < k; j++){
            scanf("%d", &s);
            // printf("debug: %d\r\n", s);
            matrix[i][s-1] = 1;
        }
    }
    
    for (int i=0; i < M; i++){
        scanf("%d", &(matrix[i][N]));
    }
    // debug_print_matrix(matrix, M, N);
    // debug_print_matrix(matrix, M, N+1);
    int rank = get_rank(matrix, M, N, false);
    if (M > N){
        int homo_rank = get_rank(matrix, M, N+1, true);
        // printf("debug: rank = %d\r\n", rank);
        // printf("debug: hrank = %d\r\n", homo_rank);
        if(homo_rank != rank)
        {
            printf("0\r\n");
            return 0;
        }
    }
    int dimker = N-rank;
    ret = (dimker == 0)? 1 : pow(2, dimker);
    printf("%d\r\n", ret);
    fflush(stdout);

    return 0;
}

理論的補足をすると、任意のスカラー体における線形空間での連立方程式の解について考える。 (斎藤正彦の線形代数2.5の議論は体の性質しか使ってないので \mathbb{F}_2としても成立する。)

連立方程式の解は線形変換 f(x)=Ax+bにおける ker fを考えればいい。

ここで、斉次化された方程式 f(x)=\tilde{A}\tilde{x}を考えたら rank A = rank \tilde{A}であれば、 x _ 0 \in ker \tilde{A}について ker A = \langle x _ 0 + Base(ker A) \rangleである。よって、線形多様体  V(f)の解の個数は


|V(f)| = \begin{cases}
0 & (rank A = rank \tilde{A}) \\ 
2 ^ { \dim ker A } & (else)
\end{cases}

ここで次元定理より \dim dom(f) = \dim ker A + rank A なので \dim ker A = \dim dom(f) - rank A = N - rank A

ロージアちゃんとジャクリンちゃんの3Dモデルをアップロードしました。

タイトルの通り。

定期的に自分のツイッターや同人誌でも利用しているロージアちゃんとジャクリンちゃんの3Dモデルを正式にアップロードしました。

- ジャクリン

https://www.blendswap.com/blends/view/93979

- ロージア

https://www.blendswap.com/blends/view/93981

自分のアカウントですが、作者にはアップロード許諾を頂き、ライセンスも同意したうえでのアップロードとなります。

ライセンスはCC-BY+AGPL3(利用したblenderのアドオンがAGPL3なので)です。

使用例ですが、自分はunityで次のようなアプリを作って遊んだりしてます。

 

 

 

 

M.Davis Applied Nonstandard Analysisメモ②

DavisのNSAのメモです。

Dover publ. M.Davis, Applied Nonstandard Analysisを読んでます。

今は、Losの定理を証明して、concurrence theoremを証明し、自然数の超準集合に、無限大元が存在することを示したところです。


Concurrence Theorem:  Uuniverse,  r U上のconcurrence関係として、どんな a\in dom(r)についても < {} ^ * a, b> \in {} ^ * rとなる b \in {} ^ * Uが存在する。
ここで、concurrenceな関係とは a _ 1, \cdots a _ n \in dom(r)について、 < a _ i , b > \in r\ \ (i=1, \cdots ,n )となる b\in Uが存在することである。
これを使えば、自然数 \mathbb{N}についての関係 L = \{ < x,y > | x < y \}について、超準元(無限大元)が存在することが言えます。

今回は、p37最初にある
 Sが有限であれば ^*Sに超準元は存在しないことについて考えていきます。

まず、単純に ^ {*} N-Nのconcurrence theoremでやった議論を有限集合でやったら矛盾が起きるかと思ったらそうではありません。

たとえば、 S = \{ 1,2,3 \} としたら < _ S = \{ <1,2>,<2,3> \}についてconcurrence theoremを用いると超準元であり標準元である ^ {*} 3=3について \forall a \in dom(< _ S), a < _ S {} ^ {*} 3となります。

ここで、示したい主張を以下のように言いかえます。


もし、individual集合 Sが有限であれば、超フィルター F\subset P(I)からの同値関係 \sim _Fに対して  S \cong S ^ I /\sim _Fである。

まず、 S = \{0,1\}について証明してみます。
 S \subset S ^ I /\sim _Fは明らかなので逆を示します。
 Sの元の標準表現をそれぞれ
\[
0=0 ^ I,\ \ 1=1 ^ I
\]
として、任意の a\in S ^ Iについて、
\[
S _ {a,0} = \{ \delta | a_ \delta = 0 \} ,\ \ S _ {a,1} = \{ \delta | a_ \delta = 1 \}
\]
とします。
すると、 S _ {a,0} \cup S _ {a,1} = I, S _ {a,0} \cap S _ {a,1}=\emptysetであり、
もし、 S _ {a, 0} \not \in F (\iff \mu _ F (S _ {a, 0})=0 )ならば超フィルターは補集合を元として含む(Applied NSAのTheorem 2.4)ので S _ {a, 0} ^ {C} = S _ {a,1} \in Fとなります。

では、同じ発想で一般の有限集合 S = \{s _ 1, \cdots, s _ n\}について証明します。
 n=2の時と同様に任意の a\in S ^ I対して S _ {a, s _ i}=\{\delta | a_ \delta = s _ i\}と定めると I = S _ {a, s _ 1} \cup \cdots \cup S _ {a, s _ n}となる。
よって、
\[
1 = \mu _ F (I) = \mu _ F (S _ {a, s _ 1} \cup \cdots \cup S _ {a, s _ n})
\]
となるので、超フィルターによって定められる測度 \mu _ Fの有限加法性(あるいはすべての値が0であれば \mu _ F( A _ 1 \cup \cdots \cup A _ n)=0となる Theorem2.6を背理法に使う)により、 \mu _ F (S _ {a, s _ i}) = 1となる iが存在する。

仕事面白すぎわろた

って書いてるけど、今の仕事は自分とマッチングしてるとは思えないからこのタイトルは偽りかも。あるいは仕事という対象を抽象化したものか

自分は大学入ってずっと数学とコンピューターサイエンスにハマってて、社会人とか言われた仕事するだけで絶対面白くないでしょwって思っていたが、意外にも学ぶことが多く、楽しいのかもしれないと感じてきた。

業務で必要なエンジニアスキルはもろに情報科学で広範だけど、それに留まらず、組織をうまく運営するためには組織論、プロジェクトを上手く遂行するためにはプロジェクトマネジメント、企画をして商品を売るためにはマーケティング、更に消費者の経済活動を心理学と絡めつつ論じるなら行動経済学と関わり、そもそも金の流れの基本は経済学を知らなければならず、会社や部署のお金の管理は財務会計、現状の会計から戦略を練るには管理会計が必要になる。

各分野もそれぞれ深遠で、プロジェクトマネジメントPMBOKドラッカーのマネジメントなどをみたが、プロジェクトという概念は1960年代ロケットから既にあった。そんな前から試行錯誤されてる分野でそのなかではPERTを始めとした数理的なアプローチもとられている(経営工学はプロジェクトマネジメントを範疇にいれてるのかな?)。最近のAIブームのおかげでマネジメントの見積や異常検知に機械学習が使われたりもしてる。
(個人的には仕事が増えるのは嬉しいけど、AIは人の判断材料を提供するだけで、それよりもマネジメントはリーダーがしっかり方向定めて地道なコミュニケーションしつつ全体を見渡して計画していくことが重要な気がするけど)

このように、様々な分野が混ざりあって、ビジネスを作り上げている。これを一つ一つ関連を意識しながら学ぶと意外にも面白い

しかし、自分のいるIT企業はブラック企業だった名残がつよいのか(数年前は残業100時間してカバーすればいいじゃんみたいな風潮が残ってるのか)、意外にも業務のことを体系的に学んで、実践していこうという空気が薄い気がする。
マネージャーにマネジメント考えどうなってるんですか? って聞くと実践を通して感覚つかんでる的な話をされて驚愕した。
新しいマネジメント方法を取り入れるけど、リーダーだから仕方なくやってるみたいな空気があるのか
上にいけば行くほど激務になるので、勉強に費やす時間もないのか
とか色々不安になってしまう

世界中様々な人が仕事をしていて困難に直面した結果を体系的にまとめてるのに利用しないのは、効率が悪いと思うけど。
実践だけでなく学習することが効率をあげることに繋がるし。

学ぶことが多く、その何でもありなところが面白いと感じた。

ハッピーになりたいんだよね

しょばろ関連の記事ではなく書評です。

丹羽真理 パーパスマネジメントを読みました。

今ならKindle Unlimitedで読むことが出来ます。

www.amazon.co.jp

内容としては、著者の会社で取り組んでる新しいマネジメント、社員の幸福を最大化するパーパスマネジメントを紹介、方法を解説した本となってます。

自分は、会社の人がこの本を紹介していたので、読んでみました。

続きを読む

3層NNの普遍定理の論文を読む①

こんにちは、いりすです。 最近は3層ニューラルネットワークの普遍定理を証明したCybenko, Approximation by Superpositions of Sigmoidal Functionを読んでいます。 この論文の主定理は、sigmoidalな関数 \sigmaについてニューラルネットワークで表現される数式


\displaystyle
G(x) = \sum _ {j=1}^ N a _ j \sigma(y _ j^ Tx+\theta _ j)

の集合Sが連続関数空間 C( I _ n ) L _ 1( I _ n )で稠密であることが主張です。 特に、sigmoidalな関数 \sigmaとは


\sigma = 
\left\{ 
  \begin{array}{ll}  
  1 & (t\to \infty)  \\
  0 & (t\to -\infty)  
  \end{array}
\right.

となることです。

続きを読む